SAP Функції HANA SQL: типи та приклади

⚡ Розумний підсумок

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

  • 🔄 Функції перетворення: CAST, TO_BIGINT, TO_ALPHANUM та TO_BINARY змінюють значення з одного типу даних на інший.
  • 📅 Функції дати та часу: ADD_DAYS, ADD_MONTHS та ADD_SECONDS зміщують або переформатують значення дати й часу.
  • 🔍 Функції повного тексту: SCORE та пов'язані функції ранжують результати, повернуті текстовим пошуком.
  • 🔢 Функції чисел: Функції ABS, ROUND та POWER приймають числові введення та повертають числовий результат.
  • 🔤 Функції для роботи з рядками: ASCII, CHAR та CONCAT обробляють введені символи та повертають похідне значення.
  • 🪟 Функції вікна: RANK, DENSE_RANK та ROW_NUMBER ділять результуючий набір на розділи вікна.
  • 🧰 Різне: CONVERT_CURRENCY та CURRENT_SCHEMA обробляють завдання поза межами інших шести груп.

SAP Функції HANA SQL

SAP Функції SQL HANA

SAP HANA надає наступне SAP Функції HANA-

  1. Функція перетворення типу даних – Функція перетворення типу даних використовується для перетворення одного типу даних в інший. Нижче наведено список функцій перетворення типу даних, наприклад CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY тощо.
  2. Функції дати та часу – Функції дати та часу використовуються для перетворення дати/часу в інший формат. Наприклад, ADD_DAYS, ADD_MONTHS, ADD_SECOND тощо.
  3. Функції повного тексту – Функції повного тексту використовуються для текстового пошуку. Наприклад, SCORE тощо.
  4. Числові функції – Числові функції приймають числове значення або рядок із числовими символами на вхід та повертають числові значення. Наприклад, ABS, ROUND, POWER тощо.
  5. Рядкові функції – Рядкові функції приймають рядок як вхідні дані, обробляють його та повертають значення відповідно до функції. Наприклад (ASCII, CHAR, CONCAT тощо)
  6. Функції вікна – Віконні функції дозволяють користувачеві розділяти результуючий набір запиту на групи рядків, які називаються розділами вікон. Наприклад, RANK (), DENSE_RANK (), ROW_NUMBER () тощо.
  7. Різні функції- Є ще кілька функцій, які використовуються для виконання різних завдань. Наприклад – 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.

Поширені запитання

DUMMY — це системна таблиця, що містить рівно один рядок. Вона дозволяє обчислювати вираз або функцію в операторі SELECT без посилання на будь-яку реальну таблицю.

Обидва надають зв'язаним рядкам однакове число. RANK потім пропускає наступні значення, тому за двома першими значеннями йдуть треті. DENSE_RANK не пропускає, тому за двома першими значеннями йдуть другі.

Так. Опис перетворення простою мовою повертає відповідну функцію та синтаксис, що швидше, ніж перегляд списку літератури з кількох сотень записів.

Часто. Функція, обгорнута навколо відфільтрованого стовпця, перешкоджає ефективній фільтрації, і ШІ може реструктуризувати предикат, щоб стовпець залишився недоторканим. Підтвердіть план виконання.

Так, але застосування цього до стовпця примусово виконується для кожного рядка. Де це можливо, трансформуйте константу, щоб стовпець все ще можна було ефективно фільтрувати.

Підсумуйте цей пост за допомогою: