SAP Funkce HANA SQL: Typy a příklady

⚡ Chytré shrnutí

SAP Funkce HANA SQL transformují hodnoty uvnitř dotazu bez přesunu dat do aplikační vrstvy. Sedm kategorií zahrnuje konverze datových typů, datum a čas, fulltext, čísla, řetězce, okna a různé operace.

  • 🔄 Konverzní funkce: Funkce CAST, TO_BIGINT, TO_ALPHANUM a TO_BINARY mění hodnotu z jednoho datového typu na jiný.
  • 📅 Funkce data a času: Funkce ADD_DAYS, ADD_MONTHS a ADD_SECONDS posouvají nebo přeformátují hodnoty data a času.
  • 🔍 Funkce pro práci s plným textem: SCORE a související funkce řadí výsledky vrácené textovým vyhledáváním.
  • 🔢 Číselné funkce: Funkce ABS, ROUND a POWER přijímají číselný vstup a vracejí číselný výsledek.
  • 🔤 Funkce pro práci s řetězci: ASCII, CHAR a CONCAT zpracovávají vstupní znaky a vracejí odvozenou hodnotu.
  • 🪟 Funkce okna: Funkce RANK, DENSE_RANK a ROW_NUMBER rozdělují sadu výsledků na oddíly oken.
  • 🧰 Různé: CONVERT_CURRENCY a CURRENT_SCHEMA zpracovávají úlohy mimo ostatních šest skupin.

SAP Funkce HANA SQL

SAP Funkce HANA SQL

SAP HANA Poskytuje následující SAP Funkce HANA-

  1. Funkce konverze datových typů – Funkce konverze datových typů se používá k převodu jednoho datového typu na jiný. Níže je uveden seznam funkcí konverze datových typů – např. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY atd.
  2. Funkce data a času – Funkce Date Time se používají k převodu data/času do jiného formátu. Např. – ADD_DAYS, ADD_MONTHS, ADD_SECOND atd.
  3. Fulltextové funkce – Fulltextové funkce se používají pro textové vyhledávání. Např. – SCORE atd.
  4. Číselné funkce – Číselné funkce přijímají jako vstup číselnou hodnotu nebo řetězec s číselnými znaky a vracejí číselné hodnoty. Např. ABS, ROUND, POWER atd.
  5. Funkce řetězců – Funkce pracující s řetězci berou jako vstup řetězec, zpracovávají ho a vracejí hodnotu podle funkce. Např. (ASCII, CHAR, CONCAT atd.)
  6. Funkce okna – Funkce okna umožňují uživateli rozdělit sadu výsledků dotazu do skupin řádků pojmenovaných okenní partice. Např. RANK (), DENSE_RANK (), ROW_NUMBER () atd.
  7. Různé funkce - Existuje několik dalších funkcí, které se používají pro různé úlohy. Např. – CONVERT_CURRENCY, CURRENT_SCHEMA atd.

Každá výše uvedená funkce je vyhodnocena uvnitř databázového enginu, a proto je vkládání logiky do funkce téměř vždy rychlejší než načítání řádků a jejich zpracování v aplikaci. Níže uvedené příklady používají tabulku DUMMY, systémovou tabulku s jedním řádkem, která existuje čistě proto, aby bylo možné výraz testovat bez kontaktu se skutečnými daty.

Skalární, agregační a okenní funkce

Před příklady jeden rozdíl určuje, jak se funkce v dotazu chová: kolik řádků vstupuje a kolik jich vystupuje.

Kategorie Řádky dovnitř : řádky ven Potřebuje GROUP BY? Příklady
Skalární Jeden řádek na jeden řádek Ne HORNÍ, KULO, DATUM_DO, ODLITÍ
Agregát Mnoho řádků na jeden řádek Ano, pokud celá sada není jedna skupina SOUČET, AVG, POČET, MIN, MAX
Okno Mnoho řádků na mnoho řádků Ne, místo toho se používá OVER POŘADÍ, HUSTOTA_POŘADÍ, ČÍSLO_ŘÁDKU, ZPOŽDĚNÍ
Tabulka Vrátí sadu výsledků Používá se v klauzuli FROM DATUM_VYTVOŘENÍ_SÉRIE

Praktickým důsledkem je, že agregační funkce sbalí podrobnosti, zatímco okenní funkce je zachová. Dotazování se na každého zaměstnance spolu s průměrem jeho oddělení vyžaduje okenní funkci, protože GROUP BY by jednotlivé řádky zcela odstranila.

Společný SAP Funkce HANA s příklady

Níže uvedené příkazy lze vložit přímo do konzole SQL. Každý z nich demonstruje jednu kategorii z výše uvedeného seznamu.

1) Funkce pro práci s řetězci. Tyto funkce přijímají vstupní znaky a vracejí odvozenou hodnotu.

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) Číselné funkce. Chování při zaokrouhlování stojí za to otestovat, protože ROUND používá komerční zaokrouhlování, zatímco FLOOR a CEIL se vždy pohybují jedním směrem.

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) Funkce data a času. Tyto jsou nejčastěji potřeba pro vykazování období.

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) Převodní funkce. Explicitní konverze zabraňuje tichému převodu typů, který zpomaluje klauzuli 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;

Chování typů a limity každého cílového typu jsou popsány v SAP Datové typy HANA.

Vysvětlení funkcí okna

Funkce okna provádí výpočet napříč sadou řádků souvisejících s aktuálním řádkem, aniž by je sbalila. Klauzule OVER definuje tuto sadu a má dvě volitelné části: PARTITION BY rozděluje data do skupin a ORDER BY opravuje pořadí uvnitř každé skupiny.

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;

Tyto tři funkce hodnocení se liší pouze tehdy, když se hodnoty shodují:

  • ČÍSLO_ŘÁDKU nikdy se nedělí. Dva stejné platy stále dostávají 1 a 2, vybrané libovolně.
  • HODNOST přiřadí svázaným řádkům stejný počet a poté je přeskakuje. Po dvou řádcích na čísle 1 následují řádky 3.
  • DENSE_RANK dává svázaným řádkům stejný počet a nepřeskakuje. Dvě řady na čísle 1 jsou následovány řadami 2.

Funkce ROW_NUMBER se používá k deduplikaci, funkce RANK pro umístění v soutěžním stylu a funkce DENSE_RANK, pokud sekvence musí zůstat nepřerušená. Porovnání a logické symboly používané spolu s těmito funkcemi jsou popsány v SAP Provozovatelé HANAa struktura příkazů v SAP HANA SQL.

Nejčastější dotazy

DUMMY je systémová tabulka obsahující přesně jeden řádek. Umožňuje vyhodnotit výraz nebo funkci v příkazu SELECT bez odkazování na jakoukoli skutečnou tabulku.

Oba přiřadí svázaným řádkům stejné číslo. Funkce RANK poté přeskočí další hodnoty, takže po dvou prvních hodnotách následuje třetí. Funkce DENSE_RANK nepřeskočí, takže po dvou prvních hodnotách následuje druhá.

Ano. Popis transformace v jednoduchém jazyce vrátí odpovídající funkci a syntaxi, což je rychlejší než procházení seznamu referencí o několika stovkách záznamů.

Často. Funkce omotaná kolem filtrovaného sloupce brání efektivnímu filtrování a umělá inteligence může restrukturalizovat predikát tak, aby sloupec zůstal nedotčen. Potvrďte s plánem provedení.

Ano, ale jeho použití na sloupec vynutí vyhodnocení na každém řádku. Kdykoli je to možné, transformujte konstantu, aby bylo možné sloupec stále efektivně filtrovat.

Shrňte tento příspěvek takto: