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'.