出处:http://blog.youkuaiyun.com/donkey2004112103/archive/2009/05/03/4146114.aspx
abap中select语句里有几个需要注意的地方。如果要让选择的结果在某一个范围之内的话可以用between 和in 这两个关键字。大多数情况下二者的反映都是一样的,但是如果为空的情况就不一样了。如下:
WHERE vbeln BETWEEN pa_vb_s AND pa_vb_e.
WHERE VBELN IN pa_vb.
他们的定义如下:
SELECT-OPTIONS pa_vb FOR vbrk-vbeln.
PARAMETERS: pa_vb_s TYPE vbeln,
pa_vb_e TYPE VBELN.
如果他们都为空的话,between会限制select语句让它一条记录都无法选出来,但是in的话则相反,这个限制条件不会起任何作用,会选择出所有的记录。 这是二者最大的区别。
但是有一个小小的陷阱,ranges变量和select-options感觉上时相同的。但是在用select语句的时候表现会不同。代码如下:
PARAMETERS: pa_vb_s TYPE vbeln,
pa_vb_e TYPE VBELN.
ranges pa_vb for VBRK-vbeln.
pa_vb-sign = 'I'.
pa_vb-option = 'BT'.
PA_VB-LOW = PA_VB_S.
PA_VB-HIGH = PA_VB_E.
APPEND pa_vb.
此时如果用刚才的select语句用in去限制的话,也会一条都选不出来!这里起初不明白为什么会这样,跟踪程序发现就在append这句话。如果 用selct-options这句,在选择框里什么都不填的话,那么select-options这个ragnes变量里面是空值,就是内表记录数是0! 相当于没有append。但是我们自定义ragnes变量的时候会append空值,即使没有输入。这样就和between的功效一样了。要想和 selct-options的作用一样这样写就可以了。
IF PA_VB_S IS NOT INITIAL or PA_VB_E IS NOT INITIAL.
APPEND pa_vb.
ENDIF.
全部测试代码如下:
--------------------------------
所以,从IN RANGE里SELECT的时候,一定要先判断这个RANGE不为空,否则条件语句就失效了~!!!
本文探讨了ABAP中SELECT语句使用BETWEEN与IN的区别,特别是在处理空值时的不同行为。通过示例代码展示了如何正确使用这些关键字,并提供了解决方案。
1314

被折叠的 条评论
为什么被折叠?



