sy-datum低和高定义ABAP代码

时间:2013-11-17 07:07:03

标签: sap abap

我有一个带有以下示例代码的ABAP程序,它应该根据日期列从SAP表中选择数据。

INITIALIZATION. 
select-OPTIONS: so_date FOR sy-datum.  
START-OF-SELECTION. 
so_date-sign = 'I'. 
so_date-option = 'BT'. 
so_date-low = sy-datum. 
so_date-high = '99991231'. 
APPEND so_date.

我的选择stmt是:

select c1,c2,c3 
from <sap_table>
where <date_column> in so_date.

我想知道设置so_date-high ='99991231'的目的以及它的行为方式。

2 个答案:

答案 0 :(得分:3)

BT意味着介于两者之间。 99991231是内部格式为YYYYMMDD(年 - 月 - 日)的日期,它是9999年12月31日。您选择选项的设置会命中今天和远期日期之间的任何日期。

TheG已经提到:INITIALIZATION应该更好,所以您的选择已经在选择屏幕上显示,并且可以根据需要进行修改。

select-OPTIONS: so_date FOR sy-datum.  
INITIALIZATION. 
  so_date-sign = 'I'. 
  so_date-option = 'BT'. 
  so_date-low = sy-datum. 
  so_date-high = '99991231'. 
  APPEND so_date.

备注:此预设仅适用于对话,不适用于批处理(但批量调用时,可以在批处理作业的变量中设置默认值。)

但是对于这个简单的默认值,您应该使用default的{​​{1}} - 选项:

select-options

或者说&#39;未来的一切&#39;:

SELECT-OPTIONS: so_date FOR sy-datum DEFAULT sy-datum to '99991231'.

SELECT-OPTIONS: so_date FOR sy-datum DEFAULT sy-datum OPTION GE. 意味着更大的平等。

答案 1 :(得分:0)

如果我是你,我会将so_date-high ='99991231'置于初始化部分下,以便它在选择屏幕上反映出来。如果用户想要更改日期范围,则可以更灵活地在选择屏幕中进行更改。这样,用户就知道在select语句上生效的日期范围。确保最终用户在工作时知道日期范围是一种很好的做法,而无需查看代码来查找硬编码信息。

选择c1,c2,c3 从表到 so_date中的位置。

上面的选择将选择c1,c3和c3字段并将其放在满足条件GE so_date-low和LE so_date-high的表中。 (LE-小于或等于; GE - 大于或等于)