SAP Функції HANA SQL: типи та приклади
⚡ Розумний підсумок
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, системна таблиця з одним рядком, яка існує виключно для того, щоб вираз можна було перевірити, не торкаючись реальних даних.
Скалярні, агрегатні та віконні функції
Перед прикладами, одна відмінність визначає, як функція поводиться в запиті: скільки рядків входить і скільки виходить.
| Категорія | Рядки вхідні : рядки вихідні | Потрібно GROUP BY? | прикладів |
|---|---|---|---|
| Скалярний | Один рядок до одного рядка | Немає | ВЕРХНІЙ, ОКРУГЛИЙ, ДО ПОТОЧНОЇ ДАТИ, ВІДЛИВ |
| заповнювач | Багато рядків в одному рядку | Так, якщо тільки весь набір не є однією групою | SUM, AVG, КІЛЬКІСТЬ, МІН, МАКС |
| Window | Багато рядків до багатьох рядків | Ні, замість цього використовується OVER | РАНГ, ЩІЛЬНИЙ_РАНГ, НОМЕР_РЯДУ, ВІДСТАННЯ |
| таблиця | Повертає набір результатів | Використовується в реченні FROM | ДАТА_ЗГЕНЕРУВАННЯ_СЕРІЇ |
Практичним наслідком є те, що агрегат згортає деталі, тоді як віконна функція їх зберігає. Запит даних про кожного співробітника разом із середнім значенням його відділу потребує віконної функції, оскільки 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;
Три функції ранжування відрізняються лише тоді, коли значення збігаються:
- НОМЕР_РОУДУ ніколи не зрівняється. Дві однакові зарплати все одно отримують 1 та 2, обрані довільно.
- RANK дає зв'язаним рядкам однакову кількість, а потім пропускає. За двома рядками з нумерацією 1 йде рядок 3.
- DENSE_RANK дає зв'язаним рядкам однакову кількість і не пропускає. За двома рядками з нумерацією 1 йдуть рядки з нумерацією 2.
Використовуйте ROW_NUMBER для дедуплікації, RANK для розміщення у стилі змагань та DENSE_RANK, коли послідовність має залишатися нерозривною. Порівняння та логічні символи, що використовуються разом із цими функціями, розглядаються в SAP Оператори HANA, та структура оператора в SAP HANA SQL.
