SAP HANA SQL-funktsioonid: tüübid ja näited
⚡ Nutikas kokkuvõte
SAP HANA SQL-funktsioonid teisendavad päringu sees väärtusi ilma andmeid rakenduskihile teisaldamata. Seitse kategooriat hõlmavad andmetüübi teisendamist, kuupäeva ja kellaaega, täisteksti, numbrit, stringi, akent ja mitmesuguseid toiminguid.
SAP HANA SQL-funktsioonid
SAP HANA pakub järgmist SAP HANA funktsioonid-
- Andmetüübi teisendusfunktsioon – Andmetüübi teisendusfunktsiooni kasutatakse ühe andmetüübi teisendamiseks. Allpool on loend andmetüübi teisendusfunktsioonidest – nt CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY jne.
- Kuupäeva ja kellaaja funktsioonid – Kuupäeva ja kellaaja funktsiooni kasutatakse kuupäeva/kellaaja teisendamiseks teise vormingusse. Näiteks – ADD_DAYS, ADD_MONTHS, ADD_SECOND jne.
- Täisteksti funktsioonid – Täistekstifunktsioone kasutatakse tekstiotsinguks. Näiteks – SCORE jne.
- Numbrifunktsioonid – Arvufunktsioonid võtavad sisendiks numbrilise väärtuse või numbriliste märkidega stringi ja tagastavad numbrilised väärtused. Näiteks – ABS, ROUND, POWER jne.
- Stringi funktsioonid – Stringifunktsioonid võtavad sisendiks stringi, töötlevad seda ja tagastavad väärtuse vastavalt funktsioonile. Näiteks (ASCII, CHAR, CONCAT jne).
- Akna funktsioonid – Aknafunktsioonid võimaldavad kasutajal jagada päringu tulemuste komplekti ridade rühmadeks, mida nimetatakse aknapartitsioonideks. Näiteks RANK(), DENSE_RANK(), ROW_NUMBER() jne.
- Mitmesugused funktsioonid - On veel mõned funktsioonid, mida kasutatakse mitmesuguste tööde jaoks. Nt – CONVERT_CURRENCY, CURRENT_SCHEMA jne.
Kõik ülaltoodud funktsioonid hinnatakse andmebaasimootoris, mistõttu on loogika funktsiooni sisestamine peaaegu alati kiirem kui ridade toomine ja nende töötlemine rakenduses. Allolevates näidetes kasutatakse DUMMY tabelit, mis on üherealine süsteemitabel, mis eksisteerib puhtalt, et avaldist saaks testida ilma reaalseid andmeid puudutamata.
Skalaar-, agregaat- ja aknafunktsioonid
Enne näiteid, üks erinevus määrab, kuidas funktsioon päringus käitub: mitu rida sisestatakse ja mitu väljub.
| Kategooria | Read sisse : read välja | Vajab GROUP BY-d? | Näited |
|---|---|---|---|
| Skalaar | Üks rida ühe rea vastu | Ei | ÜLEMINE, ÜMAR, KUUPÄEV, VALAMINE |
| Agregeeritud | Paljud read ühe rea kohta | Jah, välja arvatud juhul, kui kogu komplekt on üks grupp | SUM, AVG, LOEND, MIN, MAX |
| Aken | Paljud read paljude ridadeni | Ei, see kasutab hoopis OVER-i | ASTME, TIHEDASED_ASTMED, RIDA_NUMBER, VIIVITUS |
| Tabel | Tagastab tulemuste komplekti | Kasutatakse FROM-klauslis | SEERIA_GENEREERIMISE_KUUPÄEV |
Praktiline tagajärg on see, et agregaatfunktsioon koondab detailid, samas kui aknafunktsioon säilitab need. Iga töötaja ja tema osakonna keskmise küsimine nõuab aknafunktsiooni, sest GROUP BY eemaldaks üksikud read täielikult.
ühine SAP HANA funktsioonid näidetega
Allolevad laused saab otse SQL-konsooli kleepida. Igaüks neist demonstreerib ühte kategooriat ülaltoodud loendist.
1) Stringfunktsioonid. Need võtavad vastu tähemärkide sisendi ja tagastavad tuletatud väärtuse.
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) Arvfunktsioonid. Ümardamise käitumist tasub testida, sest ROUND kasutab kommertslikku ümardamist, samas kui FLOOR ja CEIL liiguvad alati ühes suunas.
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) Kuupäeva ja kellaaja funktsioonid. Neid on perioodiaruannete jaoks kõige sagedamini vaja.
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) Teisendusfunktsioonid. Selgesõnaline teisendamine hoiab ära vaikse tüübi sundimise, mis aeglustab WHERE-klauslit.
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;
Tüübi käitumist ja iga sihttüübi piiranguid käsitletakse jaotises SAP HANA andmetüübid.
Aknafunktsioonide selgitus
Aknafunktsioon teostab arvutuse praeguse reaga seotud ridade hulgas, neid kokku ahendamata. OVER-klausel defineerib selle hulga ja sellel on kaks valikulist osa: PARTITION BY jagab andmed rühmadesse ja ORDER BY fikseerib iga rühma sees oleva järjestuse.
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;
Kolm järjestamisfunktsiooni erinevad ainult siis, kui väärtused on võrdsed:
- RIDA_NUMBER Kunagi ei teki viiki. Kaks ühesugust palka saavad ikkagi suvaliselt valitud 1 ja 2.
- RANK annab seotud ridadele sama arvu ja seejärel jätab vahele. Kahele reale numbril 1 järgneb 3.
- TIHEDUS_ASTME annab seotud ridadele sama arvu ja ei jäta vahele. Kahele reale numbril 1 järgneb rida 2.
Kasutage ROW_NUMBER funktsiooni dubleerivate arvude vähendamiseks, RANK funktsiooni võistlusstiilis järjestuse määramiseks ja DENSE_RANK funktsiooni, kui järjestus peab jääma katkematuks. Nende funktsioonide kõrval kasutatavaid võrdlus- ja loogikasümboleid käsitletakse jaotises SAP HANA operaatoridja lause struktuur SAP HANA SQL.

