SAP Funcții SQL HANA: Tipuri și exemple

⚡ Rezumat inteligent

SAP Funcțiile SQL HANA transformă valorile dintr-o interogare fără a muta datele în stratul aplicației. Șapte categorii acoperă conversia tipurilor de date, data și ora, textul complet, numărul, șirul de caractere, ferestrele și operațiuni diverse.

  • 🔄 Funcții de conversie: CAST, TO_BIGINT, TO_ALPHANUM și TO_BINARY modifică o valoare de la un tip de date la altul.
  • 📅 Funcții de dată și oră: ADD_DAYS, ADD_MONTHS și ADD_SECONDS decalează sau reformatează valorile datei și orei.
  • 🔍 Funcții fulltext: SCORE și funcțiile înrudite clasifică rezultatele returnate de o căutare text.
  • 🔢 Funcții numerice: ABS, ROUND și POWER acceptă intrări numerice și returnează un rezultat numeric.
  • 🔤 Funcții de șiruri de caractere: ASCII, CHAR și CONCAT procesează caracterele introduse și returnează o valoare derivată.
  • 🪟 Funcții ferestre: RANK, DENSE_RANK și ROW_NUMBER împart un set de rezultate în partiții de ferestre.
  • 🧰 Diverse: CONVERT_CURRENCY și CURRENT_SCHEMA gestionează sarcini în afara celorlalte șase grupuri.

SAP Funcții SQL HANA

SAP Funcții SQL HANA

SAP HANA oferă următoarele SAP Funcții HANA-

  1. Funcția de conversie a tipului de date – Funcția de conversie a tipurilor de date este utilizată pentru a converti un tip de date în altul. Mai jos se află o listă a funcției de conversie a tipurilor de date - De exemplu, CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY etc.
  2. Funcții de dată și oră – Funcțiile Date/Time sunt utilizate pentru a converti data/ora într-un format diferit. De exemplu – ADD_DAYS, ADD_MONTHS, ADD_SECOND etc.
  3. Funcții fulltext - Funcțiile Fulltext sunt utilizate pentru căutarea de text. De exemplu – SCORE etc.
  4. Funcții numerice - Funcțiile numerice primesc o valoare numerică sau un șir de caractere numerice ca intrare și returnează valori numerice. De exemplu – ABS, ROUND, POWER etc.
  5. Funcții șiruri - Funcțiile de tip șir de caractere primesc un șir de caractere ca intrare, îl procesează și returnează o valoare conform funcției. De exemplu (ASCII, CHAR, CONCAT etc.)
  6. Funcții ferestre - Funcțiile Window permit utilizatorului să împartă setul de rezultate al unei interogări în grupuri de rânduri numite partiție window. De exemplu, RANK(), DENSE_RANK(), ROW_NUMBER() etc.
  7. Funcție diverse- Există mai multe funcții, care sunt folosite pentru munca diverse. De exemplu – CONVERT_CURRENCY, CURRENT_SCHEMA etc.

Fiecare funcție de mai sus este evaluată în motorul bazei de date, motiv pentru care introducerea logicii într-o funcție este aproape întotdeauna mai rapidă decât preluarea rândurilor și procesarea acestora într-o aplicație. Exemplele de mai jos utilizează tabelul DUMMY, un tabel de sistem cu un singur rând care există exclusiv pentru ca o expresie să poată fi testată fără a atinge datele reale.

Funcții scalare, agregate și de fereastră

Înainte de exemple, o distincție decide cum se comportă o funcție într-o interogare: câte rânduri intră și câte ies.

Categorii Rânduri de intrare: rânduri de ieșire Necesită GROUP BY? Exemple
mărime scalară Un rând pe un rând Nu MAXIM, ROTUND, LA_DATA, DISTRIBUȚIE
Agregat Mai multe rânduri pe un rând Da, cu excepția cazului în care întregul set este un singur grup SUMĂ, AVG, NUMĂRARE, MIN, MAX
Fereastră Mai multe rânduri către mai multe rânduri Nu, folosește OVER în schimb RANG, RANG_DENS, NUMĂR_RÂND, DECALAJ
Tabel Returnează un set de rezultate Folosit în clauza FROM DATA_GENERAȚIEI_SERII

Consecința practică este că un agregat restrânge detaliile, în timp ce o funcție de tip fereastră le păstrează. Solicitarea fiecărui angajat împreună cu media departamentului său necesită o funcție de tip fereastră, deoarece o funcție GROUP BY ar elimina complet rândurile individuale.

Comun SAP Funcții HANA cu exemple

Instrucțiunile de mai jos pot fi lipite direct în consola SQL. Fiecare demonstrează o categorie din lista de mai sus.

1) Funcții de șiruri de caractere. Acestea preiau caractere de intrare și returnează o valoare derivată.

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) Funcții numerice. Comportamentul la rotunjire merită testat, deoarece ROUND folosește rotunjiri comerciale, în timp ce FLOOR și CEIL se mișcă întotdeauna într-o singură direcție.

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) Funcții de dată și oră. Acestea sunt cele mai des necesare pentru raportarea perioadei.

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) Funcții de conversie. Conversia explicită previne constrângerea silențioasă de tip care încetinește o clauză 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;

Comportamentul tipurilor și limitele fiecărui tip țintă sunt acoperite în SAP Tipuri de date HANA.

Funcțiile ferestrei explicate

O funcție de tip fereastră efectuează un calcul pe un set de rânduri legate de rândul curent, fără a le restrânge. Clauza OVER definește acel set și are două părți opționale: PARTITION BY împarte datele în grupuri, iar ORDER BY fixează secvența din interiorul fiecărui grup.

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;

Cele trei funcții de clasificare diferă doar atunci când valorile sunt egale:

  • ROW_NUMBER niciodată la egalitate. Două salarii identice primesc tot 1 și 2, alese arbitrar.
  • RANG dă rândurilor legate același număr și apoi sare peste. Două rânduri la 1 sunt urmate de 3.
  • DENSE_RANK dă rândurilor legate același număr și nu sare peste rânduri. Două rânduri la 1 sunt urmate de 2.

Folosește ROW_NUMBER pentru deduplicare, RANK pentru plasarea în stil competițional și DENSE_RANK când secvența trebuie să rămână neîntreruptă. Simbolurile de comparație și logice utilizate alături de aceste funcții sunt prezentate în SAP Operatori HANAși structura instrucțiunilor în SAP HANA SQL.

Întrebări frecvente

DUMMY este un tabel de sistem care conține exact un rând. Permite evaluarea unei expresii sau a unei funcții într-o instrucțiune SELECT fără a face referire la niciun tabel real.

Ambele atribuie rândurilor legate același număr. RANK sare apoi următoarele valori, astfel încât două prime valori sunt urmate de a treia. DENSE_RANK nu sare, astfel încât două prime valori sunt urmate de a doua.

Da. Descrierea transformării în limbaj simplu returnează funcția și sintaxa corespunzătoare, ceea ce este mai rapid decât scanarea unei liste de referințe cu câteva sute de intrări.

Adesea. O funcție înfășurată în jurul unei coloane filtrate împiedică filtrarea eficientă, iar inteligența artificială poate restructura predicatul astfel încât coloana să rămână neatinsă. Confirmați cu planul de execuție.

Da, dar aplicând-o la evaluarea forțelor coloanei pe fiecare rând. Ori de câte ori este posibil, transformați constanta în schimb, astfel încât coloana să poată fi filtrată în continuare eficient.

Rezumați această postare cu: