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.

  • 🔄 Teisendusfunktsioonid: CAST, TO_BIGINT, TO_ALPHANUM ja TO_BINARY muudavad väärtuse ühest andmetüübist teise.
  • 📅 Kuupäeva ja kellaaja funktsioonid: ADD_DAYS, ADD_MONTHS ja ADD_SECONDS nihutavad või vormindavad kuupäeva ja kellaaja väärtusi.
  • 🔍 Täisteksti funktsioonid: SCORE ja sellega seotud funktsioonid järjestavad tekstiotsingu tulemused.
  • 🔢 Numbrifunktsioonid: ABS, ROUND ja POWER aktsepteerivad numbrilist sisendit ja tagastavad numbrilise tulemuse.
  • 🔤 Stringifunktsioonid: ASCII, CHAR ja CONCAT töötlevad sisestatud märke ja tagastavad tuletatud väärtuse.
  • 🪟 Akna funktsioonid: RANK, DENSE_RANK ja ROW_NUMBER jagavad tulemuste komplekti aknapartitsioonideks.
  • 🧰 Muu: CONVERT_CURRENCY ja CURRENT_SCHEMA tegelevad ülesannetega väljaspool kuut ülejäänud gruppi.

SAP HANA SQL-funktsioonid

SAP HANA SQL-funktsioonid

SAP HANA pakub järgmist SAP HANA funktsioonid-

  1. 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.
  2. 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.
  3. Täisteksti funktsioonid – Täistekstifunktsioone kasutatakse tekstiotsinguks. Näiteks – SCORE jne.
  4. 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.
  5. Stringi funktsioonid – Stringifunktsioonid võtavad sisendiks stringi, töötlevad seda ja tagastavad väärtuse vastavalt funktsioonile. Näiteks (ASCII, CHAR, CONCAT jne).
  6. 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.
  7. 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.

KKK

DUMMY on süsteemitabel, mis sisaldab täpselt ühte rida. See võimaldab avaldist või funktsiooni SELECT-lauses hinnata ilma reaalsele tabelile viitamata.

Mõlemad annavad seotud ridadele sama numbri. RANK jätab seejärel järgmised väärtused vahele, seega kahele esimesele järgneb kolmas. DENSE_RANK ei jäta vahele, seega kahele esimesele järgneb teine.

Jah. Teisenduse kirjeldamine lihtsas keeles tagastab sobiva funktsiooni ja süntaksi, mis on kiirem kui mitmesaja kirjega viiteloendi läbivaatamine.

Tihti. Filtreeritud veeru ümber mähitud funktsioon takistab tõhusat filtreerimist ja tehisintellekt saab predikaadi ümber struktureerida nii, et veerg jääb puutumata. Kinnitage täitmisplaaniga.

Jah, aga selle rakendamine veerule sunnib hindamist iga rea ​​puhul. Võimaluse korral tuleks konstanti teisendada, et veergu saaks endiselt tõhusalt filtreerida.

Võta see postitus kokku järgmiselt: