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.

  • ๐Ÿ”„ Muunnosfunktiot: CAST, TO_BIGINT, TO_ALPHANUM ja TO_BINARY muuttavat arvon tietotyypistรค toiseen.
  • ๐Ÿ“… Pรคivรคmรครคrรค- ja aikafunktiot: ADD_DAYS, ADD_MONTHS ja ADD_SECONDS siirtรคvรคt tai muotoilevat pรคivรคmรครคrรค- ja aika-arvoja uudelleen.
  • ๐Ÿ” Kokotekstifunktiot: SCORE ja siihen liittyvรคt funktiot luokittelevat tekstihaun palauttamat tulokset.
  • ๐Ÿ”ข Numerofunktiot: ABS, ROUND ja POWER hyvรคksyvรคt numeerisen syรถtteen ja palauttavat numeerisen tuloksen.
  • ๐Ÿ”ค Merkkijonofunktiot: ASCII-, CHAR- ja CONCAT-merkit kรคsittelevรคt merkkisyรถtteen ja palauttavat johdetun arvon.
  • ๐ŸชŸ Ikkunan toiminnot: RANK, DENSE_RANK ja ROW_NUMBER jakavat tulosjoukon ikkunaosioihin.
  • ๐Ÿงฐ Muuta: CONVERT_CURRENCY ja CURRENT_SCHEMA kรคsittelevรคt tehtรคviรค kuuden muun ryhmรคn ulkopuolella.

SAP HANA SQL -funktiot

SAP HANA SQL -funktiot

SAP HANA tarjoaa seuraavat SAP HANA-toiminnot-

  1. Tietotyypin muunnosfunktio โ€“ Tietotyypin muunnostoimintoja kรคytetรครคn muuntamaan tietotyyppi toiseksi. Alla on luettelo tietotyypin muunnosfunktioista - esim. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY jne.
  2. 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.
  3. Kokotekstifunktiot โ€“ Kokotekstifunktioita kรคytetรครคn tekstihakuun. Esim. โ€“ SCORE jne.
  4. Numerofunktiot โ€“ Numerofunktiot ottavat syรถtteeksi numeerisen arvon tai numeerisia merkkejรค sisรคltรคvรคn merkkijonon ja palauttavat numeerisia arvoja. Esim. ABS, ROUND, POWER jne.
  5. merkkijonofunktiot โ€“ Merkkijonofunktiot ottavat syรถtteeksi merkkijonon, kรคsittelevรคt sen ja palauttavat arvon funktion mukaisesti. Esim. (ASCII, CHAR, CONCAT jne.)
  6. Ikkunan toiminnot - Ikkunafunktioiden avulla kรคyttรคjรค voi jakaa kyselyn tulosjoukon riviryhmiin nimeltรค ikkunaosio. Esim. RANK(), DENSE_RANK(), ROW_NUMBER() jne.
  7. 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.

UKK

DUMMY on jรคrjestelmรคtaulukko, joka sisรคltรครค tรคsmรคlleen yhden rivin. Se mahdollistaa lausekkeen tai funktion laskemisen SELECT-lausekkeessa ilman viittauksia mihinkรครคn reaalitaulukkoon.

Molemmat antavat tasoitettuille riveille saman numeron. RANK ohittaa sitten seuraavat arvot, joten kahta ensimmรคistรค seuraa kolmas. DENSE_RANK ei ohita, joten kahta ensimmรคistรค seuraa toinen.

Kyllรค. Muunnoksen kuvaaminen selkokielellรค palauttaa vastaavan funktion ja syntaksin, mikรค on nopeampaa kuin useiden satojen merkintรถjen luettelon selaaminen.

Usein. Suodatetun sarakkeen ympรคrille kiedottu funktio estรครค tehokkaan suodatuksen, ja tekoรคly voi jรคrjestรครค predikaatin uudelleen niin, ettรค sarake pysyy koskemattomana. Vahvista suoritussuunnitelmalla.

Kyllรค, mutta sen soveltaminen sarakkeeseen pakottaa laskennan jokaisella rivillรค. Muunna vakiota aina kun mahdollista, jotta sarake voidaan edelleen suodattaa tehokkaasti.

Tiivistรค tรคmรค viesti seuraavasti: