我有一个带有以下示例代码的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'的目的以及它的行为方式。
答案 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 - 大于或等于)