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.

SAP Funkcje SQL HANA
SAP HANA zapewnia następujące SAP Funkcje HANA-
- 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.
- 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.
- Funkcje pełnotekstowe – Funkcje pełnotekstowe służą do wyszukiwania tekstu, np. SCORE itp.
- 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.
- Funkcje łańcuchowe – Funkcje stringowe przyjmują string jako dane wejściowe, przetwarzają go i zwracają wartość zgodnie z funkcją. Np. (ASCII, CHAR, CONCAT itp.)
- 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.
- 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.
