SAP Funzioni SQL di HANA: tipi ed esempi

⚡ Riepilogo intelligente

SAP Le funzioni SQL di HANA trasformano i valori all'interno di una query senza spostare i dati al livello applicativo. Sette categorie coprono la conversione dei tipi di dati, le operazioni su date e ore, fulltext, numeri, stringhe, finestre e altre operazioni varie.

  • 🔄 Funzioni di conversione: Le funzioni CAST, TO_BIGINT, TO_ALPHANUM e TO_BINARY convertono un valore da un tipo di dati a un altro.
  • ???? Funzioni di data e ora: ADD_DAYS, ADD_MONTHS e ADD_SECONDS spostano o riformattano i valori di data e ora.
  • 🔍 Funzioni di testo completo: SCORE e le funzioni correlate classificano i risultati restituiti da una ricerca testuale.
  • 🔢 Funzioni numeriche: Le funzioni ABS, ROUND e POWER accettano un input numerico e restituiscono un risultato numerico.
  • 🔤 Funzioni stringa: ASCII, CHAR e CONCAT elaborano l'input di caratteri e restituiscono un valore derivato.
  • 🪟 Funzioni della finestra: RANK, DENSE_RANK e ROW_NUMBER suddividono un set di risultati in partizioni di finestra.
  • 🧰 Varie: CONVERT_CURRENCY e CURRENT_SCHEMA gestiscono attività al di fuori degli altri sei gruppi.

SAP Funzioni SQL di HANA

SAP Funzioni SQL di HANA

SAP HANA fornisce quanto segue SAP Funzioni HANA-

  1. Funzione di conversione del tipo di dati – La funzione di conversione del tipo di dati viene utilizzata per convertire un tipo di dati in un altro. Di seguito è riportato l'elenco delle funzioni di conversione del tipo di dati: ad esempio CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY ecc.
  2. Funzioni data/ora – Le funzioni Data e Ora vengono utilizzate per convertire date e ore in formati diversi. Ad esempio: ADD_DAYS, ADD_MONTHS, ADD_SECOND, ecc.
  3. Funzioni del testo completo – Le funzioni Fulltext vengono utilizzate per la ricerca testuale. Ad esempio, SCORE ecc.
  4. Funzioni numeriche – Le funzioni numeriche prendono in input un valore numerico, o una stringa contenente caratteri numerici, e restituiscono valori numerici. Ad esempio: ABS, ROUND, POWER, ecc.
  5. Funzioni delle stringhe – Le funzioni per le stringhe prendono una stringa in input, la elaborano e restituiscono un valore in base alla funzione. Ad esempio (ASCII, CHAR, CONCAT, ecc.).
  6. Funzioni della finestra – Le funzioni finestra consentono all'utente di dividere il set di risultati di una query in gruppi di righe denominati partizioni finestra. Ad esempio RANK(), DENSE_RANK(), ROW_NUMBER(), ecc.
  7. Funzione varia- Ci sono altre funzioni, che vengono utilizzate per lavori vari. Ad esempio – CONVERT_CURRENCY, CURRENT_SCHEMA, ecc.

Ogni funzione sopra descritta viene valutata all'interno del motore del database, motivo per cui inserire la logica in una funzione è quasi sempre più veloce che recuperare le righe ed elaborarle in un'applicazione. Gli esempi seguenti utilizzano la tabella DUMMY, una tabella di sistema a riga singola che esiste esclusivamente per consentire di testare un'espressione senza accedere a dati reali.

Funzioni scalari, aggregate e finestra

Prima di passare agli esempi, è importante sottolineare una distinzione che determina il comportamento di una funzione in una query: quante righe vengono inserite e quante ne vengono restituite.

Categoria Righe in entrata : righe in uscita Serve la clausola GROUP BY? Esempi
Scalare Una riga per una riga Non SUPERIORE, ROTONDO, FATTO, CAST
Aggregato Molte righe in una riga Sì, a meno che l'intero insieme non sia un unico gruppo. SOMMA, AVG, CONTEGGIO, MIN, MAX
Finestra Da molte righe a molte righe No, usa OVER invece RANK, DENSE_RANK, ROW_NUMBER, LAG
Table Restituisce un set di risultati Utilizzato nella clausola FROM DATA_GENERA_SERIE

La conseguenza pratica è che un'aggregazione comprime i dettagli, mentre una funzione finestra li preserva. Richiedere il valore di ciascun dipendente insieme alla media del suo dipartimento richiede una funzione finestra, perché un GROUP BY eliminerebbe completamente le singole righe.

Uncommon SAP Funzioni HANA con esempi

Le istruzioni seguenti possono essere incollate direttamente nella console SQL. Ciascuna illustra una categoria dell'elenco precedente.

1) Funzioni per le stringhe. Questi prendono in input un carattere e restituiscono un valore derivato.

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) Funzioni numeriche. Vale la pena testare il comportamento di arrotondamento, perché ROUND utilizza l'arrotondamento commerciale mentre FLOOR e CEIL si muovono sempre in una direzione.

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) Funzioni relative a data e ora. Questi sono quelli più spesso necessari per la rendicontazione periodica.

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) Funzioni di conversione. La conversione esplicita impedisce la coercizione implicita del tipo che rallenta una clausola WHERE.

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;

Il comportamento del tipo e i limiti di ciascun tipo di destinazione sono trattati in SAP Tipi di dati HANA.

Spiegazione delle funzioni di Windows

Una funzione finestra esegue un calcolo su un insieme di righe correlate alla riga corrente, senza comprimerle. La clausola OVER definisce tale insieme e ha due parti opzionali: PARTITION BY suddivide i dati in gruppi e ORDER BY fissa la sequenza all'interno di ciascun gruppo.

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;

Le tre funzioni di classificazione differiscono solo in caso di parità di valore:

  • ROW_NUMBER Non ci sono mai pareggi. Due stipendi identici ricevono comunque 1 e 2, scelti arbitrariamente.
  • RANGO assegna lo stesso numero alle righe a pari merito e poi salta. Due righe con il numero 1 sono seguite dal numero 3.
  • DENSO_RANGO assegna lo stesso numero alle righe a pari merito e non salta. Due righe al numero 1 sono seguite dal numero 2.

Utilizzare ROW_NUMBER per la deduplicazione, RANK per il posizionamento in stile competizione e DENSE_RANK quando la sequenza deve rimanere ininterrotta. I simboli di confronto e logici utilizzati insieme a queste funzioni sono trattati in SAP operatori HANAe struttura dell'istruzione in SAP HANASQL.

DOMANDE FREQUENTI

DUMMY è una tabella di sistema contenente esattamente una riga. Consente di valutare un'espressione o una funzione in un'istruzione SELECT senza fare riferimento ad alcuna tabella reale.

Entrambi assegnano lo stesso numero alle righe a pari merito. RANK poi salta i valori successivi, quindi due primi sono seguiti da terzi. DENSE_RANK non salta, quindi due primi sono seguiti da secondi.

Sì. Descrivere la trasformazione in linguaggio naturale restituisce la funzione e la sintassi corrispondenti, il che è più veloce che scorrere un elenco di riferimento di diverse centinaia di voci.

Spesso. Una funzione applicata a una colonna filtrata impedisce un filtraggio efficiente e l'IA può ristrutturare il predicato in modo che la colonna rimanga inalterata. Verificare con il piano di esecuzione.

Sì, ma applicandolo alla colonna si forza la valutazione su ogni riga. Ove possibile, è preferibile trasformare la costante, in modo che la colonna possa comunque essere filtrata in modo efficiente.

Riassumi questo post con: