整理:齐天大圣
在SAP软件系统的前端界面,我们可能会看到一个字段的值是空的。其实,用鼠标点击是能发现是NULL值,还是空格符的。如图某设备的台账中WBS元素为空:
但是,这里跟底层数据库中存储的值可能会存在一定的差异,这种差异化会在数据流转,尤其使用ETL工具(Kettle、Informatic等)从SAP的数据库将数据抽取到其他数据库如MySQL、PostgreSQL等,会造成数据的差异化,这种差异化可能会影响数据质量治理的效果。
那么,我们表象上理解的“空值”,在SAP数据库中到底存储的是什么呢?这里以Oracle为例进行描述。通过查询上图设备的WBS元素在数据中显示:
我们知道HANA数据中日期数据类型的默认格式是YYYY-MM-DD,而在原有ECC+Oracle中日期数据类型YYYYMMDD,我想在做数据迁移的时应该会遇到这样的问题:就是需要使用SQL脚本将ABAP日期转换为HANA日期,并在空日期上保留空值。
select to_date(‘20171120′,’YYYYMMDD’) from chedan
如果ABAP日期是初始的(值’00000000’),则数据库如果日期字段没有数据,则该字段存储一个空值即’00000000’。
我们在进行SAP ECC数据质量治理工作中,在数据完整性约束条件下,大部分字段是不能写null值的,假如根据业务规定EKPO中的ERDAT日期不能为空(假如)
select * from sapsr3.ekpo a where a.erdat is null(错误)
或
select * from sapsr3.ekpo a where a.erdat=”(错误)
原因很简单,因为在底层数据库中该字段ERDAT默认值为’00000000’,所以只要没有日期数据,那数据库中该字段实际存储的值为’00000000’,而不是null值,正确的写法应该为
select * from sapsr3.ekpo a where a.erdat=’00000000′
现在有个问题,那么为什么SAP ECC版本在非HANA数据库中存储的是日期默认值为’00000000’而不是默认为null值?期待大家回答。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!