Запрашивать элементы таблицы по году от поля даты - PullRequest
1 голос
/ 09 января 2020

Я хочу получить все элементы таблицы 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 ]

3 голосов
/ 09 января 2020

DATE функции не поддерживаются в OpenSQL. Я думаю, что они являются либо только функциями HANA, либо реализованы в AbapSQL (более поздняя версия c, специфицированная Hana SQL) посредством более поздних обновлений в системах S4 / 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 символа). Чем больше c ваших критериев, тем быстрее будет выполняться ваш запрос.

Редактировать 1: Открыть SQL Функции даты реализованы с 7.51, они поддерживают вычисления, но не добыча. SAP Hana SQL - функции Datetime содержит список функций, которые вы пытались использовать, но это справочная страница SAP Hana SQL.

Редактировать 2: Для пояснения Abap SQL - это более поздняя (начиная с ABAP 7.53 и выше) итерация Open SQL. Переименование в «Abap SQL» напрямую связано с переходом на базу данных HANA и прекращением поддержки двигателей БД, отличных от HANA DB. Обратная совместимость сохраняется, но «некоторые функции» (вероятно, означающие новые функции) будут поддерживаться только БД HANA.

В качестве примечания, в последних версиях Abap (вместе с Hana DB) поддерживается поддержка числовых форматов c (в качестве опции для использования вместо текущего CHAR8 формата). Извлечение лет / месяцев из числовой даты c не так просто, как подстрока, поэтому я предполагаю, что поддержка таких функций должна появиться в 'Abap SQL'.

1 голос
/ 09 января 2020
SELECT * FROM ekko
  INTO TABLE @data(result)
  WHERE [...]
    AND aedat LIKE '2017%'.

Формат, который вы видите на скриншоте, отличается от формата базы данных. SAP GUI форматирует значения на основе их элементов данных при их отображении.

Значения даты в основном имеют тип данных DATS, который кодирует даты в виде CHAR (8) формы YYYYMMDD. В этом можно убедиться, выбрав один AEDAT и используя WRITE без каких-либо опций форматирования, чтобы вывести его на экран в необработанном формате.

Таким образом, самый простой способ запроса по части года - это условие LIKE '2017%' соответствует каждой строке, начинающейся с «2017».

0 голосов
/ 09 января 2020

Это невозможно при abap sql. Если вы хотите выполнить запрос, передайте поле даты диапазона для конкретного года.

Ниже приведен код smaple для получения данных года 2017.

DATA lr_aedat TYPE RANGE OF ekko-aedat. ДАННЫЕ ls_aedat LIKE LINE OF 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.
...