SAP HANA SQL-funktioner: Typer och exempel
⚡ Smart sammanfattning
SAP HANA SQL-funktioner transformerar värden i en fråga utan att flytta data till applikationslagret. Sju kategorier täcker datatypkonvertering, datum och tid, fulltext, tal, sträng, fönster och diverse operationer.

SAP HANA SQL-funktioner
SAP HANA Tillhandahåller följande SAP HANA funktioner-
- Datatypkonverteringsfunktion – Datatypkonverteringsfunktionen används för att konvertera en datatyp till en annan. Nedan finns en lista över funktion för datatypkonvertering, t.ex. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY etc.
- Datum Tidsfunktioner – Datum- och tidsfunktioner används för att konvertera datum/tid till ett annat format. T.ex. – ADD_DAYS, ADD_MONTHS, ADD_SECOND, etc.
- Fulltextfunktioner – Fulltextfunktioner används för textsökning. T.ex. – SCORE etc.
- Nummerfunktioner – Nummerfunktioner tar ett numeriskt värde, eller en sträng med numeriska tecken, som indata och returnerar numeriska värden. T.ex. – ABS, ROUND, POWER, etc.
- Strängfunktioner – Strängfunktioner tar en sträng som indata, bearbetar den och returnerar värde enligt funktionen. T.ex. (ASCII, CHAR, CONCAT, etc.)
- Fönsterfunktioner – Fönsterfunktioner låter användaren dela upp resultatmängden från en fråga i grupper av rader med namnet fönsterpartition. T.ex. RANK(), DENSE_RANK(), ROW_NUMBER() etc.
- Diverse funktion- Det finns ytterligare några funktioner, som används för diversejobbet. T.ex. – CONVERT_CURRENCY, CURRENT_SCHEMA, etc.
Varje funktion ovan utvärderas inuti databasmotorn, vilket är anledningen till att det nästan alltid är snabbare att skicka logik till en funktion än att hämta rader och bearbeta dem i en applikation. Exemplen nedan använder DUMMY-tabellen, en systemtabell med en enda rad som existerar enbart så att ett uttryck kan testas utan att röra verkliga data.
Skalära, aggregerade och fönsterfunktioner
Innan exemplen avgör en distinktion hur en funktion beter sig i en fråga: hur många rader som ska in och hur många som kommer ut.
| Kategori | Rader in: rader ut | Behöver GROUP BY? | Exempel |
|---|---|---|---|
| Skalär | En rad till en rad | Nej | ÖVRE, RUND, HITTILLS, GJUTNING |
| Aggregate | Många rader på en rad | Ja, om inte hela mängden är en enda grupp | BELOPP, AVG, ANTAL, MIN, MAX |
| Fönster | Många rader till många rader | Nej, den använder OVER istället | RANK, DENSE_RANK, ROW_NUMBER, LAG |
| Bord | Returnerar en resultatuppsättning | Används i FROM-klausulen | SERIE_GENERERA_DATUM |
Den praktiska konsekvensen är att ett aggregat komprimerar detaljer medan en fönsterfunktion bevarar dem. Att fråga efter varje anställd bredvid deras avdelningsgenomsnitt kräver en fönsterfunktion, eftersom en GROUP BY skulle ta bort de enskilda raderna helt.
Gemensam SAP HANA-funktioner med exempel
Instruktionerna nedan kan klistras in direkt i SQL-konsolen. Varje instruktion demonstrerar en kategori från listan ovan.
1) Strängfunktioner. Dessa tar teckeninmatning och returnerar ett härlett värde.
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. Avrundningsbeteendet är värt att testa, eftersom ROUND använder kommersiell avrundning medan FLOOR och CEIL alltid rör sig i en riktning.
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) Datum- och tidsfunktioner. Dessa är de som oftast behövs för periodrapportering.
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. Explicit konvertering förhindrar den tysta typtvånget som saktar ner 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;
Typbeteende och begränsningar för varje måltyp behandlas i SAP HANA-datatyper.
Förklaring av fönsterfunktioner
En fönsterfunktion utför en beräkning över en uppsättning rader relaterade till den aktuella raden, utan att komprimera dem. OVER-klausulen definierar den uppsättningen och har två valfria delar: PARTITION BY delar upp data i grupper och ORDER BY fixerar sekvensen inom varje grupp.
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 rangordningsfunktionerna skiljer sig endast åt när värdena är lika:
- ROW_NUMBER aldrig oavgjort. Två identiska löner får fortfarande 1 och 2, godtyckligt valda.
- RANG ger samma nummer för obundna rader och hoppar sedan över. Två rader vid 1 följs av 3.
- DENSE_RANK ger samma antal rader som är bundna och hoppar inte över. Två rader vid 1 följs av 2.
Använd ROW_NUMBER för att deduplicera, RANK för placering i tävlingsstil och DENSE_RANK när sekvensen måste förbli obruten. Jämförelse- och logiska symboler som används tillsammans med dessa funktioner behandlas i SAP HANA-operatöreroch satsstruktur i SAP HANA SQL.
