SAP HANA SQL-funktioner: Typer og eksempler

⚡ Smart opsummering

SAP HANA SQL-funktioner transformerer værdier i en forespørgsel uden at flytte data til applikationslaget. Syv kategorier dækker datatypekonvertering, dato og klokkeslæt, fuldtekst, tal, streng, vindue og diverse operationer.

  • 🔄 Konverteringsfunktioner: CAST, TO_BIGINT, TO_ALPHANUM og TO_BINARY ændrer en værdi fra én datatype til en anden.
  • 📅 Dato- og tidsfunktioner: ADD_DAYS, ADD_MONTHS og ADD_SECONDS ændrer eller omformaterer dato- og klokkeslætsværdier.
  • 🔍 Fuldtekstfunktioner: SCORE og relaterede funktioner rangerer resultater returneret af en tekstsøgning.
  • 🔢 Talfunktioner: ABS, ROUND og POWER accepterer numerisk input og returnerer et numerisk resultat.
  • 🔤 Strengfunktioner: ASCII, CHAR og CONCAT behandler tegninput og returnerer en afledt værdi.
  • 🪟 Vinduesfunktioner: RANK, DENSE_RANK og ROW_NUMBER opdeler et resultatsæt i vinduespartitioner.
  • 🧰 Diverse: CONVERT_CURRENCY og CURRENT_SCHEMA håndterer opgaver uden for de andre seks grupper.

SAP HANA SQL-funktioner

SAP HANA SQL-funktioner

SAP HANA Giver følgende SAP HANA funktioner-

  1. Datatypekonverteringsfunktion – Datatypekonverteringsfunktionen bruges til at konvertere en datatype til en anden. Nedenfor er en liste over datatypekonverteringsfunktioner - f.eks. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY osv.
  2. Dato Tidsfunktioner – Dato- og klokkeslætsfunktioner bruges til at konvertere dato/klokkeslæt til et andet format. F.eks. ADD_DAYS, ADD_MONTHS, ADD_SECOND osv.
  3. Fuldtekstfunktioner – Fuldtekstfunktioner bruges til tekstsøgning. F.eks. – SCORE osv.
  4. Nummerfunktioner – Talfunktioner tager en numerisk værdi eller en streng med numeriske tegn som input og returnerer numeriske værdier. F.eks. ABS, ROUND, POWER osv.
  5. Stringfunktioner – Strengfunktioner tager en streng som input, behandler den og returnerer værdi i henhold til funktionen. F.eks. (ASCII, CHAR, CONCAT osv.)
  6. Vinduesfunktioner – Vinduesfunktioner lader brugeren opdele resultatsættet af en forespørgsel i grupper af rækker med navnet vinduespartition. F.eks. RANK(), DENSE_RANK(), ROW_NUMBER() osv.
  7. Diverse funktion- Der er nogle flere funktioner, som bruges til diverse job. F.eks. – CONVERT_CURRENCY, CURRENT_SCHEMA osv.

Hver funktion ovenfor evalueres i databaseprogrammet, hvilket er grunden til, at det næsten altid er hurtigere at pushe logik ind i en funktion end at hente rækker og behandle dem i en applikation. Eksemplerne nedenfor bruger DUMMY-tabellen, en systemtabel med én række, der udelukkende eksisterer, så et udtryk kan testes uden at røre ved reelle data.

Skalære, aggregerede og vinduesfunktioner

Før eksemplerne bestemmer én sondring, hvordan en funktion opfører sig i en forespørgsel: hvor mange rækker der skal ind, og hvor mange der kommer ud.

Kategori Rækker ind: rækker ud Har du brug for GROUP BY? Eksempler
Skalar En række til en række Ingen ØVRE, RUND, TIL_DATO, STØBNING
Aggregate Mange rækker til én række Ja, medmindre hele sættet er én gruppe SUM, AVG, ANTAL, MIN, MAKS
Window Mange rækker til mange rækker Nej, den bruger OVER i stedet RANK, DENSE_RANK, ROW_NUMBER, LAG
Bordlampe Returnerer et resultatsæt Bruges i FROM-klausulen SERIE_GENERERING_DATUM

Den praktiske konsekvens er, at et aggregat skjuler detaljer, mens en vinduesfunktion bevarer dem. At spørge efter hver medarbejder sammen med deres afdelingsgennemsnit kræver en vinduesfunktion, fordi en GROUP BY ville fjerne de individuelle rækker helt.

Fælles SAP HANA-funktioner med eksempler

Nedenstående sætninger kan indsættes direkte i SQL-konsollen. Hver af dem demonstrerer én kategori fra listen ovenfor.

1) Strengfunktioner. Disse tager tegninput og returnerer en afledt værdi.

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) Talfunktioner. Afrundingsadfærden er værd at teste, fordi ROUND bruger kommerciel afrunding, mens FLOOR og CEIL altid bevæger sig i én retning.

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) Dato- og tidsfunktioner. Disse er dem, der oftest er nødvendige til perioderapportering.

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) Konverteringsfunktioner. Eksplicit konvertering forhindrer den tavse typetvang, der forsinker en WHERE-klausul.

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;

Typeadfærd og begrænsningerne for hver måltype er dækket i SAP HANA-datatyper.

Forklaring af vinduesfunktioner

En vinduesfunktion udfører en beregning på tværs af et sæt rækker relateret til den aktuelle række, uden at skjule dem. OVER-klausulen definerer dette sæt, og den har to valgfrie dele: PARTITION BY opdeler dataene i grupper, og ORDER BY fastlægger rækkefølgen inden for hver gruppe.

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;

De tre rangfunktioner adskiller sig kun, når værdierne er lige store:

  • RÆKKE_NUMBER aldrig uafgjort. To identiske lønninger får stadig 1 og 2, valgt vilkårligt.
  • RANG giver uafgjorte rækker det samme nummer og springer derefter over. To rækker ved 1 efterfølges af 3.
  • DENSE_RANK giver uafbrudte rækker det samme antal og springer ikke over. To rækker ved 1 efterfølges af 2.

Brug ROW_NUMBER til at deduplikere, RANK til placering i konkurrencestil, og DENSE_RANK når sekvensen skal forblive ubrudt. Sammenlignings- og logiske symboler, der bruges sammen med disse funktioner, er dækket i SAP HANA-operatørerog udsagnsstruktur i SAP HANA SQL.

Ofte Stillede Spørgsmål

DUMMY er en systemtabel, der indeholder præcis én række. Den tillader et udtryk eller en funktion at blive evalueret i en SELECT-sætning uden at referere til nogen reel tabel.

Begge giver uafgjorte rækker det samme nummer. RANK springer derefter de næste værdier over, så to første værdier efterfølges af en tredje værdi. DENSE_RANK springer ikke over, så to første værdier efterfølges af en anden værdi.

Ja. At beskrive transformationen i et letforståeligt sprog returnerer den matchende funktion og syntaks, hvilket er hurtigere end at scanne en referenceliste med flere hundrede poster.

Ofte. En funktion, der er pakket rundt om en filtreret kolonne, forhindrer effektiv filtrering, og AI kan omstrukturere prædikatet, så kolonnen forbliver uberørt. Bekræft med udførelsesplanen.

Ja, men hvis du anvender det på kolonnen, tvinges evaluering frem på hver række. Transformer konstanten i stedet, hvor det er muligt, så kolonnen stadig kan filtreres effektivt.

Opsummer dette indlæg med: