按年份选择日期字段?

时间:2020-01-09 04:12:16

标签: sap abap opensql

我想按年份获取表EKKO的所有元素,但我不知道如何。

这是我的查询:

SELECT * FROM EKKO INTO TABLE @data(RESULT) WHERE BUKRS = @CO_Code AND WAERS = 'USD'.

我尝试了extract()year(),就像这样:

SELECT * FROM EKKO INTO TABLE @data(RESULT) WHERE BUKRS = @CO_Code 
  AND WAERS = 'USD' AND YEAR (TO_DATE (AEDAT, 'YYYY-MM-DD') = 2017).

但是会引发错误

从YEAR开始的位置需要一个布尔表达式。

接下来我该怎么做?

这是表EKKO的内容: enter image description here

3 个答案:

答案 0 :(得分:3)

DATE不支持

OpenSQL函数。我认为它们或者是HANA(仅)函数,或者是通过S4 / Hana系统上的更高版本更新实现为AbapSQL(SQL的特定于Hana的更高版本)。您尝试与TO_DATE一起使用的那个绝对是HANA函数。

SELECT * FROM EKKO  
  WHERE BUKRS = @CO_Code AND WAERS = 'USD' 
    AND substring( AEDAT, 1, 4 ) = 2017
  INTO TABLE @data(RESULT).

您还可以使用AEDAT like '2017%'AEDAT like '2017____'_通配符表示1个字符)。您的条件越具体,查询就会越快。

修改1: OpenSQL Date functions用7.51实现,它们支持计算,但不支持提取。 SAP Hana SQL - Datetime functions列出了您尝试使用的功能,但这是SAP Hana SQL参考页。

修改2: 需要说明的是,Abap SQL只是Open SQL的后续迭代(从ABAP 7.53及更高版本开始)。重命名为“ Abap SQL”与过渡到HANA数据库和停止支持除HANA DB之外的其他数据库引擎直接相关。向后兼容性仍然存在,但是“某些功能”(可能意味着新功能)仅受HANA DB支持。

请注意,最新版本的Abap(与Hana DB一起)为数字日期格式提供了支持(可以选择使用,而不是当前的CHAR8格式)。从数字日期中提取年/月并不像子字符串那么简单,因此我认为对这种功能的支持应该出现在“ Abap SQL”中。

答案 1 :(得分:1)

SELECT * FROM ekko
  INTO TABLE @data(result)
  WHERE [...]
    AND aedat LIKE '2017%'.

您在屏幕快照中看到的格式不是数据库中真正的格式。 SAP GUI在显示值时会根据其数据元素设置值的格式。

日期值大多具有数据类型DATS,该数据类型将日期编码为YYYYMMDD形式的CHAR(8)。您可以通过选择一个AEDAT并使用WRITE(没有任何格式设置选项)将其以原始格式输出到屏幕上来进行验证。

因此,按年份部分进行查询的最简单方法是条件LIKE '2017%'与每个以“ 2017”开头的字符串匹配。

答案 2 :(得分:0)

这对于abap sql是不可能的。 如果要执行查询,则传递特定年份的范围日期字段。

以下是检索2017年数据的唯一代码。

ekko-aedat的数据lr_aedat类型范围。 数据ls_aedat就像lr_aedat的行。

ls_aedat-low = '20170101'.
ls_aedat-high = '20171231'.
ls_aedat-sign = 'I'.
ls_aedat-option = 'BT'.
APPEND ls_aedat TO lr_aedat.

SELECT * FROM EKKO
  INTO TABLE @data(t_result)
  WHERE
*     WAERS = 'USD'
     AEDAT IN @lr_aedat.