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.

SAP HANA SQL függvények
SAP A HANA a következőket nyújtja SAP HANA funkciók-
- 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.
- 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.
- Teljes szöveges funkciók – A teljes szöveges függvények szöveges keresésre szolgálnak. Pl. – SCORE stb.
- 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.
- 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.)
- 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.
- 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.
