SAP HANA SQL függvények: típusok és példák

⚡ Okos összefoglaló

SAP A HANA SQL függvények a lekérdezéseken belüli értékeket alakítanak át anélkül, hogy az adatokat az alkalmazásrétegbe helyeznék. Hét kategória fedi le az adattípus-konverziót, a dátumot és időt, a teljes szöveget, a számot, a karakterláncot, az ablakot és az egyéb műveleteket.

  • 🔄 Konverziós függvények: A CAST, TO_BIGINT, TO_ALPHANUM és TO_BINARY függvények egy adattípust egy másik adattípusra módosítanak.
  • 📅 Dátum/Idő függvények: Az ADD_DAYS, ADD_MONTHS és ADD_SECONDS függvények eltolják vagy újraformázzák a dátum- és időértékeket.
  • 🔍 Teljes szöveges függvények: A SCORE és a kapcsolódó függvények rangsorolják a szöveges keresés eredményeit.
  • 🔢 Számfüggvények: Az ABS, a ROUND és a POWER függvények numerikus bemenetet fogadnak el, és numerikus eredményt adnak vissza.
  • 🔤 Sztringfüggvények: Az ASCII, CHAR és CONCAT karaktereket dolgoz fel, és egy származtatott értéket ad vissza.
  • 🪟 Ablak funkciók: A RANK, a DENSE_RANK és a ROW_NUMBER függvények ablakpartíciókra osztják az eredményhalmazt.
  • 🧰 Egyéb: A CONVERT_CURRENCY és a CURRENT_SCHEMA a másik hat csoporton kívüli feladatokat kezeli.

SAP HANA SQL függvények

SAP HANA SQL függvények

SAP A HANA a következőket nyújtja SAP HANA funkciók-

  1. Adattípus-konverziós függvény – Az adattípus-konverziós funkciók az egyik adattípus másikká konvertálására szolgálnak. Az alábbiakban felsoroljuk az adattípus-konverziós függvényeket – pl. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY stb.
  2. Dátum és idő funkciók – A dátum/idő függvények a dátum/idő más formátumba konvertálására szolgálnak. Pl. – ADD_DAYS, ADD_MONTHS, ADD_SECOND stb.
  3. Teljes szöveges funkciók – A teljes szöveges függvények szöveges keresésre szolgálnak. Pl. – SCORE stb.
  4. Számfüggvények – A számfüggvények bemenetként numerikus értéket vagy numerikus karakterekből álló karakterláncot fogadnak el, és numerikus értékeket adnak vissza. Pl. – ABS, ROUND, POWER stb.
  5. String függvények – A karakterláncfüggvények bemenetként egy karakterláncot fogadnak el, feldolgozzák azt, és a függvénynek megfelelő értéket adnak vissza. Pl. (ASCII, CHAR, CONCAT stb.)
  6. Ablak funkciók – A Window függvények lehetővé teszik a felhasználó számára, hogy a lekérdezés eredményhalmazát ablakpartíciónak nevezett sorok csoportjaira ossza fel. Pl. RANK(), DENSE_RANK(), ROW_NUMBER() stb.
  7. Vegyes funkció- Van még néhány funkció, amelyeket a különféle munkákhoz használnak. Pl. – CONVERT_CURRENCY, CURRENT_SCHEMA stb.

A fenti függvények mindegyike az adatbázismotoron belül értékelődik ki, ezért a logika függvénybe való beillesztése szinte mindig gyorsabb, mint a sorok lekérése és egy alkalmazásban történő feldolgozása. Az alábbi példák a DUMMY táblát használják, amely egy egysoros rendszertábla, amely tisztán létezik, így egy kifejezés tesztelhető a valódi adatok megérintése nélkül.

Skaláris, aggregált és ablakfüggvények

A példák előtt egy különbségtétel határozza meg, hogyan viselkedik egy függvény egy lekérdezésben: hány sor kerül be, és hány jön ki.

Kategória Sorok be: sorok ki Szükséges a GROUP BY? Példák
skaláris Egy sorból egy sorba Nem FELSŐ, KEREK, DÁTUM, ÖNTÉS
adalékanyag Sok sor egy sorhoz Igen, kivéve, ha az egész készlet egy csoportot alkot. ÖSSZEG, AVG, DARAB, MIN, MAX
Ablak Sok sor sok sorhoz Nem, OVER-t használ helyette RANG, SŰRŰ_RANG, SOR_SZÁMA, KÉSÉS
Táblázat Eredményhalmazt ad vissza A FROM záradékban használatos SOROZAT_GENERÁLÁSI_DÁTUM

A gyakorlati következmény az, hogy egy aggregátum összevonja a részleteket, míg egy ablakfüggvény megőrzi azokat. Ha minden egyes alkalmazottra rákérdezünk az osztályuk átlagával együtt, akkor ablakfüggvényre van szükség, mert egy GROUP BY teljesen eltávolítaná az egyes sorokat.

Közös SAP HANA függvények példákkal

Az alábbi utasítások közvetlenül beilleszthetők az SQL konzolba. Mindegyik a fenti listából egy kategóriát mutat be.

1) Sztringfüggvények. Ezek karakterbevitelt fogadnak el, és egy származtatott értéket adnak vissza.

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) Számfüggvények. A kerekítési viselkedést érdemes tesztelni, mivel a ROUND kereskedelmi kerekítéseket használ, míg a FLOOR és a CEIL mindig egy irányba mozog.

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) Dátum- és időfüggvények. Ezekre van leggyakrabban szükség az időszaki jelentésekhez.

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) Átváltási függvények. Az explicit konverzió megakadályozza a csendes típuskényszerítést, amely lelassítja a WHERE záradékot.

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;

A típusok viselkedését és az egyes céltípusok korlátait a következő részben tárgyaljuk: SAP HANA adattípusok.

Ablakfüggvények magyarázata

Egy ablakfüggvény számítást hajt végre az aktuális sorhoz kapcsolódó sorok halmazán anélkül, hogy összecsukná azokat. Az OVER záradék definiálja ezt a halmazt, és két opcionális része van: a PARTITION BY csoportokra osztja az adatokat, az ORDER BY pedig rögzíti az egyes csoportokon belüli sorrendet.

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;

A három rangsoroló függvény csak akkor tér el egymástól, ha az értékek megegyeznek:

  • ROW_NUMBER soha nem döntetlen. Két azonos fizetés esetén továbbra is 1 és 2 jár, amelyeket önkényesen választanak ki.
  • RANG az összetartozott soroknak ugyanannyit ad, majd kihagyja. Az 1-es sornál lévő két sort 3 követi.
  • DENSE_RANK az összetartozott soroknak ugyanannyit ad, és nem ugrik ki. Az 1-es sornál lévő két sort 2 követ.

Használja a ROW_NUMBER függvényt a deduplikációk kiszűrésére, a RANK függvényt a versenystílusú helyezésekhez, és a DENSE_RANK függvényt, ha a sorozatnak megszakítatlannak kell maradnia. Az összehasonlító és logikai szimbólumok, amelyeket ezek mellett használunk, a következő részben találhatók: SAP HANA operátorok, és az utasításszerkezet a SAP HANA SQL.

GYIK

A DUMMY egy pontosan egy sort tartalmazó rendszertábla. Lehetővé teszi egy kifejezés vagy függvény kiértékelését egy SELECT utasításban anélkül, hogy valódi táblára hivatkoznánk.

Mindkettő ugyanazt a sorszámot adja az összetartozó soroknak. A RANK ezután kihagyja a következő értékeket, így két elsőt a harmadik követ. A DENSE_RANK nem hagyja ki, így két elsőt a második követ.

Igen. A transzformáció egyszerű nyelven történő leírása visszaadja a megfelelő függvényt és szintaxist, ami gyorsabb, mint egy több száz bejegyzésből álló referencialista átnézése.

Gyakran. Egy szűrt oszlop köré tekert függvény megakadályozza a hatékony szűrést, és a mesterséges intelligencia átstrukturálhatja a predikátumot, hogy az oszlop érintetlen maradjon. Erősítse meg a végrehajtási tervvel.

Igen, de ha az oszlopra alkalmazza, akkor minden sorban kiértékelésre kerül sor. Ahol csak lehetséges, alakítsa át az állandót, hogy az oszlop továbbra is hatékonyan szűrhető legyen.

Foglald össze ezt a bejegyzést a következőképpen: