SAP HANA SQL -funktiot: tyypit ja esimerkit
โก รlykรคs yhteenveto
SAP HANA SQL -funktiot muuntavat kyselyn sisรคllรค olevia arvoja siirtรคmรคttรค tietoja sovelluskerrokseen. Seitsemรคn luokkaa kattavat tietotyypin muunnokset, pรคivรคmรครคrรคn ja kellonajan, koko tekstin, numeron, merkkijonon, ikkunan ja sekalaiset toiminnot.

SAP HANA SQL -funktiot
SAP HANA tarjoaa seuraavat SAP HANA-toiminnot-
- Tietotyypin muunnosfunktio โ Tietotyypin muunnostoimintoja kรคytetรครคn muuntamaan tietotyyppi toiseksi. Alla on luettelo tietotyypin muunnosfunktioista - esim. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY jne.
- Pรคivรคmรครคrรค ja kellonaika toiminnot โ Pรคivรคmรครคrรค- ja aikafunktioita kรคytetรครคn pรคivรคmรครคrรคn/kellonajan muuntamiseen eri muotoon. Esim. ADD_DAYS, ADD_MONTHS, ADD_SECOND jne.
- Kokotekstifunktiot โ Kokotekstifunktioita kรคytetรครคn tekstihakuun. Esim. โ SCORE jne.
- Numerofunktiot โ Numerofunktiot ottavat syรถtteeksi numeerisen arvon tai numeerisia merkkejรค sisรคltรคvรคn merkkijonon ja palauttavat numeerisia arvoja. Esim. ABS, ROUND, POWER jne.
- merkkijonofunktiot โ Merkkijonofunktiot ottavat syรถtteeksi merkkijonon, kรคsittelevรคt sen ja palauttavat arvon funktion mukaisesti. Esim. (ASCII, CHAR, CONCAT jne.)
- Ikkunan toiminnot - Ikkunafunktioiden avulla kรคyttรคjรค voi jakaa kyselyn tulosjoukon riviryhmiin nimeltรค ikkunaosio. Esim. RANK(), DENSE_RANK(), ROW_NUMBER() jne.
- Muut toiminnot - On joitain muita toimintoja, joita kรคytetรครคn sekalaisiin tรถihin. Esim. โ CONVERT_CURRENCY, CURRENT_SCHEMA jne.
Jokainen yllรค oleva funktio evaluoidaan tietokantamoottorin sisรคllรค, minkรค vuoksi logiikan syรถttรคminen funktioon on lรคhes aina nopeampaa kuin rivien hakeminen ja niiden kรคsittely sovelluksessa. Alla olevissa esimerkeissรค kรคytetรครคn DUMMY-taulukkoa, joka on yksirivinen jรคrjestelmรคtaulukko, joka on olemassa puhtaasti, jotta lauseketta voidaan testata koskematta oikeaan dataan.
Skalaari-, aggregaatti- ja ikkunafunktiot
Ennen esimerkkejรค yksi ero mรครคrรครค, miten funktio kรคyttรคytyy kyselyssรค: kuinka monta riviรค tulee sisรครคn ja kuinka monta tulee ulos.
| Luokka | Rivit sisรครคn : rivit ulos | Tarvitseeko GROUP BY -ominaisuuden? | Esimerkit |
|---|---|---|---|
| skalaari | Yksi rivi yhteen riviin | Ei | YLร, PYรREร, PรIVรMรรRร, VALETTU |
| Aggregaatti | Monta riviรค yhteen riviin | Kyllรค, ellei koko joukko ole yksi ryhmรค | SUMMA, AVG, MรรRร, MIN, MAX |
| Ikkuna | Monta riviรค, monta riviรค | Ei, siinรค kรคytetรครคn OVER-funktiota | SIJAINTI, TIIHEร_SIJAINTI, RIVINUMERO, VIIVETTรMINEN |
| Pรถytรค | Palauttaa tulosjoukon | Kรคytetรครคn FROM-lausekkeessa | SARJAN LUONTI_PรIVรMรรRร |
Kรคytรคnnรถssรค tรคmรค tarkoittaa, ettรค kooste kutistaa tiedot, kun taas ikkunafunktio sรคilyttรครค ne. Jokaisen tyรถntekijรคn kysyminen osaston keskiarvon ohella vaatii ikkunafunktion, koska GROUP BY poistaisi yksittรคiset rivit kokonaan.
Yhteinen SAP HANA-funktiot esimerkkeineen
Alla olevat lauseet voidaan liittรครค suoraan SQL-konsoliin. Jokainen niistรค esittelee yhtรค yllรค olevasta luettelosta lรถytyvรครค luokkaa.
1) Merkkijonofunktiot. Nรคmรค ottavat vastaan โโmerkkisyรถtettรค ja palauttavat johdetun arvon.
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) Numerofunktiot. Pyรถristyskรคyttรคytymistรค kannattaa testata, koska ROUND kรคyttรครค kaupallista pyรถristystรค, kun taas FLOOR ja CEIL liikkuvat aina yhteen suuntaan.
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) Pรคivรคmรครคrรค- ja aikafunktiot. Nรคitรค tarvitaan useimmiten jaksoraportointiin.
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) Muunnosfunktiot. Eksplisiittinen muunnos estรครค hiljaisen tyyppipakottamisen, joka hidastaa WHERE-lauseketta.
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;
Tyypin kรคyttรคytymistรค ja kunkin kohdetyypin rajoituksia kรคsitellรครคn kohdassa SAP HANA-tietotyypit.
Ikkunafunktioiden selitys
Ikkunafunktio suorittaa laskutoimituksen joukolle riviรค, jotka liittyvรคt nykyiseen riviin, kutistamatta niitรค. OVER-lauseke mรครคrittelee kyseisen joukon, ja sillรค on kaksi valinnaista osaa: PARTITION BY jakaa tiedot ryhmiin ja ORDER BY kiinnittรครค jรคrjestyksen kunkin ryhmรคn sisรคllรค.
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;
Kolme sijoitusfunktiota eroavat toisistaan โโvain silloin, kun arvot ovat yhtรค suuret:
- ROW_NUMBER ei koskaan tasapeliรค. Kaksi samanlaista palkkaa saavat silti mielivaltaisesti valitut luvut 1 ja 2.
- RANK antaa tasoissa oleville riveille saman numeron ja ohittaa sitten. Kahta riviรค numerolla 1 seuraa rivi 3.
- TIHEร_SIJOITUS antaa tasoitettuille riveille saman numeron eikรค ohita riviรค. Kahta riviรค numerolla 1 seuraa rivi 2.
Kรคytรค ROW_NUMBER-funktiota deduplikaatioiden poistamiseen, RANK-funktiota kilpailutyyliseen sijoitukseen ja DENSE_RANK-funktiota, kun sekvenssin on pysyttรคvรค katkeamattomana. Nรคiden funktioiden rinnalla kรคytettyjรค vertailu- ja loogisia symboleja kรคsitellรครคn kohdassa SAP HANA-operaattoritja lauserakenne kohdassa SAP HANA SQL.
