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.

  • 🔄 Konverteringsfunktioner: CAST, TO_BIGINT, TO_ALPHANUM och TO_BINARY ändrar ett värde från en datatyp till en annan.
  • 📅 Datum- och tidsfunktioner: ADD_DAYS, ADD_MONTHS och ADD_SECONDS flyttar eller formaterar om datum- och tidsvärden.
  • 🔍 Fulltextfunktioner: SCORE och relaterade funktioner rangordnar resultat som returneras av en textsökning.
  • 🔢 Nummerfunktioner: ABS, ROUND och POWER accepterar numerisk inmatning och returnerar ett numeriskt resultat.
  • 🔤 Strängfunktioner: ASCII, CHAR och CONCAT bearbetar teckeninmatning och returnerar ett härlett värde.
  • 🪟 Fönsterfunktioner: RANK, DENSE_RANK och ROW_NUMBER delar upp en resultatmängd i fönsterpartitioner.
  • 🧰 Övrigt: CONVERT_CURRENCY och CURRENT_SCHEMA hanterar uppgifter utanför de andra sex grupperna.

SAP HANA SQL-funktioner

SAP HANA SQL-funktioner

SAP HANA Tillhandahåller följande SAP HANA funktioner-

  1. 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.
  2. 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.
  3. Fulltextfunktioner – Fulltextfunktioner används för textsökning. T.ex. – SCORE etc.
  4. 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.
  5. Strängfunktioner – Strängfunktioner tar en sträng som indata, bearbetar den och returnerar värde enligt funktionen. T.ex. (ASCII, CHAR, CONCAT, etc.)
  6. 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.
  7. 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.

Vanliga frågor

DUMMY är en systemtabell som innehåller exakt en rad. Den låter ett uttryck eller en funktion utvärderas i en SELECT-sats utan att referera till någon riktig tabell.

Båda ger samma nummer för obundna rader. RANK hoppar sedan över nästa värde, så två första följs av ett tredje. DENSE_RANK hoppar inte över, så två första följs av ett andra.

Ja. Att beskriva transformationen i enkelt språk returnerar matchningsfunktionen och syntaxen, vilket är snabbare än att skanna en referenslista med flera hundra poster.

Ofta. En funktion som är lindad runt en filtrerad kolumn förhindrar effektiv filtrering, och AI kan omstrukturera predikatet så att kolumnen förblir orörd. Bekräfta med exekveringsplanen.

Ja, men om man tillämpar det på kolumnen tvingas utvärderingen fram på varje rad. Om möjligt transformera konstanten istället, så att kolumnen fortfarande kan filtreras effektivt.

Sammanfatta detta inlägg med: