我想按年份获取表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开始的位置需要一个布尔表达式。
接下来我该怎么做?
答案 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.