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.

SAP HANA SQL-funktioner
SAP HANA Giver følgende SAP HANA funktioner-
- 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.
- 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.
- Fuldtekstfunktioner – Fuldtekstfunktioner bruges til tekstsøgning. F.eks. – SCORE osv.
- 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.
- Stringfunktioner – Strengfunktioner tager en streng som input, behandler den og returnerer værdi i henhold til funktionen. F.eks. (ASCII, CHAR, CONCAT osv.)
- 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.
- 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.
