Select 按年份的日期字段?
Select date field by year?
我想按年份获取 table 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).
但它抛出错误
A Boolean expression is required in positions starting with YEAR.
接下来我应该做什么才能完成?
tableEKKO
的内容如下:
SELECT * FROM ekko
INTO TABLE @data(result)
WHERE [...]
AND aedat LIKE '2017%'.
您在屏幕截图中看到的格式并不是数据库中的真实格式。 SAP GUI 在显示值时根据其数据元素格式化值。
日期值大多具有数据类型 DATS
,它将日期编码为 YYYYMMDD
形式的 CHAR(8)。您可以通过选择单个 AEDAT 并使用不带任何格式选项的 WRITE 以原始格式将其输出到屏幕上来验证这一点。
因此,按年份部分查询的最简单方法是使用条件 LIKE '2017%'
匹配以“2017”开头的每个字符串。
abap sql 无法做到这一点。
如果要执行查询,则传递特定年份的范围日期字段。
以下是获取2017年数据的示例代码
数据lr_aedat ekko-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.
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 数据库以外的数据库引擎。向后兼容性保持不变,但 "some features"(可能意味着新功能)将仅由 HANA DB 支持。
附带说明一下,最新版本的 Abap(连同 Hana DB)支持数字日期格式(作为替代当前 CHAR8
格式的选项)。从数字日期中提取 years/months 不像子字符串那么简单,所以我认为对这些函数的支持应该出现在 'Abap SQL'.
中
我想按年份获取 table 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).
但它抛出错误
A Boolean expression is required in positions starting with YEAR.
接下来我应该做什么才能完成?
tableEKKO
的内容如下:
SELECT * FROM ekko
INTO TABLE @data(result)
WHERE [...]
AND aedat LIKE '2017%'.
您在屏幕截图中看到的格式并不是数据库中的真实格式。 SAP GUI 在显示值时根据其数据元素格式化值。
日期值大多具有数据类型 DATS
,它将日期编码为 YYYYMMDD
形式的 CHAR(8)。您可以通过选择单个 AEDAT 并使用不带任何格式选项的 WRITE 以原始格式将其输出到屏幕上来验证这一点。
因此,按年份部分查询的最简单方法是使用条件 LIKE '2017%'
匹配以“2017”开头的每个字符串。
abap sql 无法做到这一点。 如果要执行查询,则传递特定年份的范围日期字段。
以下是获取2017年数据的示例代码
数据lr_aedat ekko-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.
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 数据库以外的数据库引擎。向后兼容性保持不变,但 "some features"(可能意味着新功能)将仅由 HANA DB 支持。
附带说明一下,最新版本的 Abap(连同 Hana DB)支持数字日期格式(作为替代当前 CHAR8
格式的选项)。从数字日期中提取 years/months 不像子字符串那么简单,所以我认为对这些函数的支持应该出现在 'Abap SQL'.