ABAP 中的null 与 space / ''

1、 select sum( vv801 ) into lv_vv801
        from ce11000
        where kaufn = ''
          and vrgar = 'A'
          and paledger = '02'
          and plikz = '0'.

结果有值,说明数据库表中存在kaufn 为 space 或者''的情况,但我却不知道怎么在ce11000表中查找kaufn 为space的记录

   select sum( vv801 ) into lv_vv801
        from ce11000
        where kaufn is null
          and vrgar = 'A'
          and paledger = '02'
          and plikz = '0'.
 结果为0

 

2、注:   在ce11000表中kaufn 条件输入时,选择selection options-->single value 不输入任何值,则可读取

        出所有kuafn为空的记录(此处应该指kaufn is null'',不包含space的记录),vrgar = 'B' 时 vv801的值有的有值,有的为0

   select sum( vv801 ) into lv_vv801
        from ce11000
        where kaufn = it_so-vbeln
          and vrgar = 'A'
          and paledger = '02'
          and plikz = '0'.
    itab-vv801_o = itab-vv801_o + lv_vv801.
    clear lv_vv801.

 

3、.检查空值:
WHERE ... f IS[NOT] NUll ... //来判断数据库字段f中的值是否为空值。
注:在ABAP中,特定的数据对象都具有初始值,这些初始值可能是一串0或空格等,
但不等同于数据库中的NULL值,
因而使用ABAP语句添加数据条目时,
所有的数据字段都不可能是空值。但在ABAP数据词典里仍有可能存在控制字段,
因为Native SQL可以进行空值设置。

 

  if it_so-vbeln is not initial.
     select sum( vv801 ) into lv_vv801
          from ce11000
          where kaufn = it_so-vbeln
            and vrgar = 'A'
            and paledger = '02'
            and plikz = '0'.
      itab-vv801_o = itab-vv801_o + lv_vv801.
  else.
     select sum( vv801 ) into lv_vv801
          from ce11000
          where kaufn is null
            and vrgar = 'A'
            and paledger = '02'
            and plikz = '0'.
      itab-vv801_o = itab-vv801_o + lv_vv801.
  endif.

 

因为function team 同事说 vrgar = 'A' 时,vv801 =0 ,她是在cel11000表中用2中描述的方法读取数据的,

无法找到数据。可在sql 语句中却读出来了一个负值。。 当条件vrgar ='B' , 能读出很多数据,其中vv801的值有的为0,有的不是

根据此,我认为2中描述输入方法,只读取了kaufn 为null的情况所有记录, 并没有读取出space 情况下的记录,否则当vrgar 为A时

就应该能读取出记录。。

ABAP中常见的初始值和空值的小陷阱
在开发中经常会遇到这样的情况:一个表在启用了一段时间之后需要增加一些字段,而表中已经存在数据了。

添加字段是个很简单的工作,但是由此产生的查询问题却经常会困扰我们。

在 SE11 或者 SE16(N) 查看数据时,SAP 把具有初始值和空值的字段都显示为初始值,但是在查询语句中,它们在数据库中的行为却是不同的。用比较运算符无法判断出为空值的情形。

因此,一般来说,自定义表的字段都应该把 Initial Value 列勾上,这样添加到数据库的字段就会用初始值来填充,也就不会出现空值问题了。

如果已经添加的字段没有勾上 Initial Value,可以用下列 SQL 语句来更新:
UPDATE dbtab SET field = ” WHERE field IS NULL.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值