SAP Funkcje HANA SQL: typy i przykłady

⚡ Inteligentne podsumowanie

SAP Funkcje HANA SQL przekształcają wartości w zapytaniu bez przenoszenia danych do warstwy aplikacji. Siedem kategorii obejmuje konwersję typów danych, datę i godzinę, pełnotekst, liczby, ciągi znaków, okna i inne operacje.

  • 🔄 Funkcje konwersji: CAST, TO_BIGINT, TO_ALPHANUM i TO_BINARY zmieniają wartość z jednego typu danych na inny.
  • 📅 Funkcje daty i czasu: Funkcje ADD_DAYS, ADD_MONTHS i ADD_SECONDS zmieniają lub formatują wartości daty i godziny.
  • 🔍 Funkcje pełnotekstowe: SCORE i powiązane z nim funkcje klasyfikują wyniki zwrócone przez wyszukiwanie tekstowe.
  • 🔢 Funkcje liczbowe: Funkcje ABS, ROUND i POWER akceptują dane numeryczne i zwracają wynik liczbowy.
  • 🔤 Funkcje łańcuchowe: ASCII, CHAR i CONCAT przetwarzają dane wejściowe znakowe i zwracają wartość pochodną.
  • 🪟 Funkcje okna: RANK, DENSE_RANK i ROW_NUMBER dzielą zbiór wyników na partycje okna.
  • 🧰 Różne: Grupy CONVERT_CURRENCY i CURRENT_SCHEMA zajmują się zadaniami spoza pozostałych sześciu grup.

SAP Funkcje HANA SQL

SAP Funkcje SQL HANA

SAP HANA zapewnia następujące SAP Funkcje HANA-

  1. Funkcja konwersji typu danych – Funkcje konwersji typu danych służą do konwersji jednego typu danych na inny. Poniżej znajduje się lista funkcji konwersji typu danych - np. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY itp.
  2. Funkcje daty i godziny – Funkcje daty i czasu służą do konwersji daty/czasu na różne formaty. Np. – DODAJ_DNI, DODAJ_MIESIĄCE, DODAJ_SEKUNDĘ itd.
  3. Funkcje pełnotekstowe – Funkcje pełnotekstowe służą do wyszukiwania tekstu, np. SCORE itp.
  4. Funkcje liczbowe – Funkcje liczbowe przyjmują wartość liczbową lub ciąg znaków liczbowych jako dane wejściowe i zwracają wartości liczbowe. Np. ABS, ROUND, POWER itd.
  5. Funkcje łańcuchowe – Funkcje stringowe przyjmują string jako dane wejściowe, przetwarzają go i zwracają wartość zgodnie z funkcją. Np. (ASCII, CHAR, CONCAT itp.)
  6. Funkcje okna – Funkcje okienne pozwalają użytkownikowi podzielić zbiór wyników zapytania na grupy wierszy zwane partycjami okiennymi. Np. RANK(), DENSE_RANK(), ROW_NUMBER() itd.
  7. Różne funkcje- Istnieje kilka innych funkcji, które są używane do różnych zadań. Np. – CONVERT_CURRENCY, CURRENT_SCHEMA, itd.

Każda z powyższych funkcji jest obliczana w silniku bazy danych, dlatego wstawienie logiki do funkcji jest prawie zawsze szybsze niż pobieranie wierszy i przetwarzanie ich w aplikacji. Poniższe przykłady wykorzystują tabelę DUMMY, jednowierszową tabelę systemową, która istnieje wyłącznie po to, aby można było przetestować wyrażenie bez modyfikowania rzeczywistych danych.

Funkcje skalarne, agregujące i okienkowe

Przed podaniem przykładów jedno rozróżnienie decyduje o tym, jak funkcja zachowuje się w zapytaniu: ile wierszy trafia do zapytania i ile wychodzi.

Kategoria Wiersze wejściowe: rzędy wyjściowe Czy potrzebne jest GROUP BY? Przykłady
Skalarny Jeden rząd do jednego rzędu Nie GÓRNY, OKRĄGŁY, DO_DATA, OBSIADANIE
Agregat Wiele wierszy w jednym wierszu Tak, chyba że cały zestaw stanowi jedną grupę SUMA, AVG, LICZ, MIN, MAX
okno Wiele rzędów do wielu rzędów Nie, zamiast tego używa OVER RANKING, GĘSTY_RANK, NUMER_WIERSZA, OPÓŹNIENIE
Stół Zwraca zestaw wyników Używane w klauzuli FROM DATA_GENEROWANIA_SERII

Praktyczną konsekwencją jest to, że agregat konsoliduje szczegóły, podczas gdy funkcja okna je zachowuje. Zapytanie o każdego pracownika wraz ze średnią dla jego działu wymaga funkcji okna, ponieważ polecenie GROUP BY całkowicie usunęłoby poszczególne wiersze.

wspólny SAP Funkcje HANA z przykładami

Poniższe instrukcje można wkleić bezpośrednio do konsoli SQL. Każda z nich demonstruje jedną kategorię z powyższej listy.

1) Funkcje łańcuchowe. Przyjmują one dane znakowe i zwracają wartość pochodną.

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) Funkcje liczbowe. Warto przetestować zachowanie zaokrąglania, ponieważ ROUND wykorzystuje komercyjne zaokrąglanie, podczas gdy FLOOR i CEIL zawsze przesuwają się w jednym kierunku.

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) Funkcje daty i czasu. Są to dane najczęściej potrzebne do raportowania okresowego.

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) Funkcje konwersji. Jawna konwersja zapobiega cichemu wymuszeniu typu, które spowalnia klauzulę 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;

Zachowanie typu i ograniczenia każdego typu docelowego są omówione w SAP Typy danych HANA.

Wyjaśnienie funkcji okna

Funkcja okna wykonuje obliczenia na zestawie wierszy powiązanych z bieżącym wierszem, bez ich zwijania. Klauzula OVER definiuje ten zestaw i składa się z dwóch opcjonalnych części: PARTITION BY dzieli dane na grupy, a ORDER BY ustala kolejność w każdej grupie.

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;

Trzy funkcje rankingowe różnią się tylko wtedy, gdy wartości są równe:

  • NUMER_WIERSZA Nigdy nie remisuje. Dwie identyczne pensje nadal otrzymują 1 i 2, wybrane arbitralnie.
  • RANGA Przypisuje rzędom o tej samej liczbie taki sam numer, a następnie pomija. Po dwóch rzędach o numerze 1 następuje rzędy o numerze 3.
  • GĘSTA_RANKA Nadaje rzędom o tej samej liczbie równych numerów i nie pomija ich. Po dwóch rzędach o numerze 1 następuje rzędy o numerze 2.

Użyj ROW_NUMBER do deduplikacji, RANK do pozycjonowania w stylu rywalizacji, a DENSE_RANK, gdy sekwencja musi pozostać nieprzerwana. Symbole porównawcze i logiczne używane wraz z tymi funkcjami są omówione w SAP Operatorzy HANAi struktura oświadczenia w SAP HANA SQL.

FAQ

DUMMY to tabela systemowa zawierająca dokładnie jeden wiersz. Pozwala ona na obliczenie wyrażenia lub funkcji w instrukcji SELECT bez odwoływania się do żadnej rzeczywistej tabeli.

Oba przypisują wierszom z tą samą liczbą. Następnie RANK pomija kolejne wartości, więc po dwóch pierwszych wartościach następuje trzecia. DENSE_RANK nie pomija, więc po dwóch pierwszych wartościach następuje druga.

Tak. Opisanie transformacji prostym językiem zwraca funkcję dopasowania i składnię, co jest szybsze niż przeglądanie listy referencyjnej składającej się z kilkuset wpisów.

Często. Funkcja owinięta wokół filtrowanej kolumny uniemożliwia efektywne filtrowanie, a AI może zrestrukturyzować predykat, tak aby kolumna pozostała nietknięta. Potwierdź z planem wykonania.

Tak, ale zastosowanie go do kolumny wymusza ocenę każdego wiersza. Tam, gdzie to możliwe, należy przekształcić stałą, aby kolumna nadal mogła być efektywnie filtrowana.

Podsumuj ten post następująco: