SAP Функции SQL в HANA: типы и примеры
⚡ Умное резюме
SAP Функции HANA SQL преобразуют значения внутри запроса без перемещения данных на уровень приложения. Семь категорий охватывают преобразование типов данных, даты и время, полнотекстовые, числовые, строковые, оконные операции и прочие операции.

SAP Функции SQL для HANA
SAP HANA предоставляет следующее SAP Функции HANA-
- Функция преобразования типов данных – Функция преобразования типов данных используется для преобразования одного типа данных в другой. Ниже приведен список функций преобразования типов данных, например CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY и т. д.
- Функции даты и времени – Функции работы с датами и временем используются для преобразования даты/времени в различные форматы. Например, ADD_DAYS, ADD_MONTHS, ADD_SECOND и т. д.
- Полнотекстовые функции – Функции полнотекстового поиска используются для поиска текста. Например, SCORE и т.д.
- Числовые функции – Функции для работы с числами принимают на вход числовое значение или строку с числовыми символами и возвращают числовые значения. Например: ABS, ROUND, POWER и т. д.
- Строковые функции – Строковые функции принимают строку в качестве входных данных, обрабатывают её и возвращают значение в соответствии с функцией. Например (ASCII, CHAR, CONCAT и т. д.).
- Оконные функции – Оконные функции позволяют пользователю разделить результирующий набор запроса на группы строк, называемые оконными разделами. Например, RANK(), DENSE_RANK(), ROW_NUMBER() и т. д.
- Разные функции- Есть еще несколько функций, которые используются для разной работы. Например – CONVERT_CURRENCY, CURRENT_SCHEMA и т. д.
Каждая из перечисленных выше функций выполняется внутри механизма базы данных, поэтому перенос логики в функцию почти всегда быстрее, чем получение и обработка строк в приложении. В приведенных ниже примерах используется таблица DUMMY — однострочная системная таблица, существующая исключительно для проверки выражения без обращения к реальным данным.
Скалярные, агрегатные и оконные функции
Прежде чем перейти к примерам, следует отметить, что поведение функции в запросе определяется одним фактором: сколько строк вводится и сколько выводится.
| Категория | Входящие ряды: исходящие ряды | Нужна группировка? | Примеры |
|---|---|---|---|
| скаляр | Один ряд к одному ряду | Нет | ВЕРХНИЙ, КРУГЛЫЙ, ДАТА, ЛИТОЙ |
| Заполнитель | Много рядов в одном ряду | Да, если только весь набор не представляет собой одну группу. | СУММА, AVG, COUNT, MIN, MAX |
| Окно | Много рядов к много рядам | Нет, вместо этого используется OVER. | RANK, DENSE_RANK, ROW_NUMBER, LAG |
| Таблица | Возвращает набор результатов | Используется в предложении FROM | SERIES_GENERATE_DATE |
Практическим следствием этого является то, что агрегирование сворачивает детали, в то время как оконная функция их сохраняет. Запрос данных по каждому сотруднику вместе со средним показателем по отделу требует использования оконной функции, поскольку использование GROUP BY полностью удалит отдельные строки.
Общие SAP Функции HANA с примерами
Приведённые ниже операторы можно вставить непосредственно в консоль SQL. Каждый из них демонстрирует одну категорию из приведённого выше списка.
1) Строковые функции. Эти функции принимают символьный ввод и возвращают производное значение.
SELECT UPPER('sap hana') AS UPPER_TEXT, LENGTH('SAP HANA') AS TEXT_LENGTH, CONCAT('SAP ', 'HANA') AS JOINED, SUBSTRING('SAP HANA', 5, 4) AS PART, REPLACE('SAP HANA', 'HANA', 'S/4') AS SWAPPED, TRIM(' padded ') AS CLEANED FROM DUMMY;
2) Числовые функции. Стоит проверить поведение механизма скругления, поскольку ROUND использует коммерческое скругление, в то время как FLOOR и CEIL всегда движутся в одном направлении.
SELECT ABS(-45.7) AS ABSOLUTE_VALUE, ROUND(123.4567, 2) AS ROUNDED, FLOOR(9.9) AS ROUNDED_DOWN, CEIL(9.1) AS ROUNDED_UP, POWER(2, 10) AS RAISED, MOD(17, 5) AS REMAINDER FROM DUMMY;
3) Функции даты и времени. Именно эти данные чаще всего требуются для составления отчетов о менструальном цикле.
SELECT CURRENT_DATE AS TODAY, ADD_DAYS(CURRENT_DATE, 30) AS IN_30_DAYS, ADD_MONTHS(CURRENT_DATE, -1) AS LAST_MONTH, DAYS_BETWEEN('2026-01-01', CURRENT_DATE) AS ELAPSED, LAST_DAY(CURRENT_DATE) AS MONTH_END, WEEKDAY(CURRENT_DATE) AS DAY_INDEX FROM DUMMY;
4) Функции преобразования. Явное преобразование предотвращает скрытое приведение типов, которое замедляет работу условия WHERE.
SELECT CAST('1234' AS INTEGER) AS AS_NUMBER, TO_VARCHAR(CURRENT_DATE, 'DD.MM.YYYY') AS AS_TEXT, TO_DECIMAL(1234.5678, 10, 2) AS AS_DECIMAL FROM DUMMY;
Поведение типов и ограничения каждого целевого типа рассматриваются в SAP Типы данных HANA.
Объяснение функций окон
Оконная функция выполняет вычисления над набором строк, связанных с текущей строкой, без их объединения. Предложение OVER определяет этот набор и имеет две необязательные части: PARTITION BY разделяет данные на группы, а ORDER BY фиксирует последовательность внутри каждой группы.
SELECT DEPARTMENT, EMP_NAME, SALARY, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS ROW_NUM, RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS RANKING, DENSE_RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS DENSE_RANKING, SUM(SALARY) OVER (PARTITION BY DEPARTMENT) AS DEPT_TOTAL FROM DHK_SCHEMA.EMPLOYEE;
Три функции ранжирования различаются только в случае равенства значений:
- ROW_NUMBER Ничья невозможна. Два человека с одинаковой зарплатой всё равно получают 1 и 2, выбранные произвольно.
- RANK / ЗВАНИЕ При совпадении номеров рядов, затем пропуск. Два ряда с номером 1 сменяются тремя.
- DENSE_RANK При совпадении номеров строк, строка в которых совпадает, номер остается тем же, пропуск не производится. Две строки с номером 1 сменяются строками с номером 2.
Используйте ROW_NUMBER для удаления дубликатов, RANK для ранжирования в соревновательном стиле и DENSE_RANK, когда последовательность должна оставаться непрерывной. Сравнение и логические символы, используемые вместе с этими функциями, описаны в [ссылка на соответствующий раздел]. SAP операторы HANAи структура оператора в SAP Хана SQL.
