SAP HANA SQL-Funktionen: Typen & Beispiele

⚡ Intelligente Zusammenfassung

SAP HANA SQL-Funktionen transformieren Werte innerhalb einer Abfrage, ohne Daten an die Anwendungsschicht zu übertragen. Sieben Kategorien umfassen Datentypkonvertierung, Datum und Uhrzeit, Volltext, Zahlen, Zeichenketten, Fensteroperationen und sonstige Operationen.

  • 🔄 Umrechnungsfunktionen: CAST, TO_BIGINT, TO_ALPHANUM und TO_BINARY wandeln einen Wert von einem Datentyp in einen anderen um.
  • 📅 Datums- und Uhrzeitfunktionen: ADD_DAYS, ADD_MONTHS und ADD_SECONDS verschieben oder formatieren Datums- und Zeitwerte neu.
  • 🔍 Volltextfunktionen: SCORE und verwandte Funktionen ordnen die Ergebnisse einer Textsuche nach ihrer Relevanz.
  • 🔢 Zahlenfunktionen: ABS, ROUND und POWER akzeptieren numerische Eingaben und geben ein numerisches Ergebnis zurück.
  • 🔤 Zeichenkettenfunktionen: ASCII, CHAR und CONCAT verarbeiten Zeicheneingaben und geben einen abgeleiteten Wert zurück.
  • 🪟 Fensterfunktionen: RANK, DENSE_RANK und ROW_NUMBER unterteilen ein Ergebnis-Set in Fensterpartitionen.
  • 🧰 Sonstiges: CONVERT_CURRENCY und CURRENT_SCHEMA bearbeiten Aufgaben, die nicht zu den anderen sechs Gruppen gehören.

SAP HANA SQL-Funktionen

SAP HANA SQL-Funktionen

SAP HANA bietet folgende SAP HANA-Funktionen-

  1. Datentyp-Konvertierungsfunktion – Datentyp-Konvertierungsfunktionen werden verwendet, um einen Datentyp in einen anderen zu konvertieren. Nachfolgend finden Sie eine Liste der Datentypkonvertierungsfunktionen, z. B. CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY usw.
  2. Datum-Uhrzeit-Funktionen – Datums- und Zeitfunktionen dienen dazu, Datum und Uhrzeit in ein anderes Format zu konvertieren. Beispiele hierfür sind ADD_DAYS, ADD_MONTHS, ADD_SECOND usw.
  3. Volltextfunktionen – Die Volltextsuche dient der Textsuche. Beispiele hierfür sind SCORE usw.
  4. Zahlenfunktionen – Zahlenfunktionen nehmen einen numerischen Wert oder eine Zeichenkette mit numerischen Zeichen als Eingabe und geben numerische Werte zurück. Beispiele: ABS, ROUND, POWER usw.
  5. String-Funktionen – Stringfunktionen nehmen eine Zeichenkette als Eingabe, verarbeiten sie und geben einen Wert entsprechend der Funktion zurück. Beispiele hierfür sind (ASCII, CHAR, CONCAT usw.).
  6. Fensterfunktionen – Mithilfe von Fensterfunktionen kann der Benutzer das Ergebnis einer Abfrage in Gruppen von Zeilen, sogenannte Fensterpartitionen, unterteilen. Beispiele hierfür sind RANK(), DENSE_RANK(), ROW_NUMBER() usw.
  7. Verschiedene Funktionen- Es gibt noch einige weitere Funktionen, die für verschiedene Aufgaben verwendet werden. Z. B. CONVERT_CURRENCY, CURRENT_SCHEMA usw.

Jede der oben genannten Funktionen wird innerhalb der Datenbank-Engine ausgewertet. Daher ist das Auslagern von Logik in eine Funktion fast immer schneller als das Abrufen und Verarbeiten von Zeilen in einer Anwendung. Die folgenden Beispiele verwenden die DUMMY-Tabelle, eine einzeilige Systemtabelle, die ausschließlich dazu dient, Ausdrücke zu testen, ohne auf echte Daten zuzugreifen.

Skalar-, Aggregat- und Fensterfunktionen

Bevor wir zu den Beispielen kommen, sei angemerkt, dass eine Unterscheidung darüber entscheidet, wie sich eine Funktion in einer Abfrage verhält: wie viele Zeilen eingegeben und wie viele ausgegeben werden.

Kategorie Eingabezeilen : Ausgabezeilen Benötigt GROUP BY? Beispiele
Scalar Eine Reihe zu einer Reihe Nein GROSS, RUNDEN, BIS_DATUM, GESTALTUNG
Aggregat Viele Zeilen zu einer Zeile Ja, es sei denn, die gesamte Gruppe besteht aus einer einzigen Gruppe. SUMME, AVG, ANZAHL, MIN, MAX
Window Viele Reihen zu vielen Reihen Nein, es verwendet stattdessen OVER. Rang, Dichte_Rang, Zeilennummer, Verzögerung
Tisch Gibt ein Resultset zurück Wird in der FROM-Klausel verwendet SERIEN_GENERIERUNGSDATUM

Die praktische Konsequenz ist, dass eine Aggregatfunktion Details ausblendet, während eine Fensterfunktion sie beibehält. Um jeden Mitarbeiter zusammen mit seinem Abteilungsdurchschnitt abzufragen, ist eine Fensterfunktion erforderlich, da eine GROUP BY-Klausel die einzelnen Zeilen vollständig entfernen würde.

gemeinsam SAP HANA-Funktionen mit Beispielen

Die folgenden Anweisungen können direkt in die SQL-Konsole eingefügt werden. Jede Anweisung veranschaulicht eine Kategorie aus der obigen Liste.

1) Stringfunktionen. Diese Funktionen nehmen Zeichen als Eingabe und geben einen abgeleiteten Wert zurück.

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) Zahlenfunktionen. Das Rundungsverhalten ist einen Test wert, da ROUND die kommerzielle Rundung verwendet, während FLOOR und CEIL sich immer in eine Richtung bewegen.

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) Datums- und Zeitfunktionen. Dies sind die am häufigsten benötigten Formulare für die periodische Berichterstattung.

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) Umrechnungsfunktionen. Die explizite Typumwandlung verhindert die stillschweigende Typumwandlung, die eine WHERE-Klausel verlangsamt.

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;

Das Verhalten der einzelnen Typen und deren Grenzen werden in folgendem Abschnitt behandelt: SAP HANA-Datentypen.

Fensterfunktionen erklärt

Eine Fensterfunktion führt eine Berechnung über eine Menge von Zeilen durch, die mit der aktuellen Zeile in Zusammenhang stehen, ohne diese zusammenzufassen. Die OVER-Klausel definiert diese Menge und hat zwei optionale Teile: PARTITION BY teilt die Daten in Gruppen auf, und ORDER BY legt die Reihenfolge innerhalb jeder Gruppe fest.

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;

Die drei Rangordnungsfunktionen unterscheiden sich nur bei gleichen Werten:

  • ROW_NUMBER Es gibt nie Gleichstände. Selbst bei zwei identischen Gehältern werden die Plätze 1 und 2 willkürlich vergeben.
  • RANK Gleichzählige Zeilen erhalten die gleiche Nummer, danach wird übersprungen. Auf zwei Zeilen mit der Nummer 1 folgt eine Zeile mit der Nummer 3.
  • DICHTE_RANK Gleichrangige Zeilen erhalten die gleiche Nummer und werden nicht übersprungen. Auf zwei Zeilen mit der Nummer 1 folgt eine Zeile mit der Nummer 2.

Verwenden Sie ROW_NUMBER zum Entfernen von Duplikaten, RANK für eine wettbewerbsorientierte Platzierung und DENSE_RANK, wenn die Sequenz ununterbrochen bleiben muss. Vergleichs- und Logiksymbole, die in Verbindung mit diesen Funktionen verwendet werden, werden in [Referenz einfügen] erläutert. SAP HANA-Operatorenund die Struktur der Aussage in SAP HANA SQL.

Häufig gestellte Fragen

Eine DUMMY-Tabelle ist eine Systemtabelle, die genau eine Zeile enthält. Sie ermöglicht die Auswertung eines Ausdrucks oder einer Funktion in einer SELECT-Anweisung, ohne dass auf eine reale Tabelle verwiesen werden muss.

Beide Funktionen weisen Zeilen mit gleichem Wert dieselbe Nummer zu. RANK überspringt anschließend die nächsten Werte, sodass auf zwei erste Werte der dritte Wert folgt. DENSE_RANK überspringt keine Werte, sodass auf zwei erste Werte der zweite Wert folgt.

Ja. Die Beschreibung der Transformation in einfacher Sprache liefert die passende Funktion und Syntax, was schneller ist als das Durchsuchen einer Referenzliste mit mehreren hundert Einträgen.

Häufig. Eine Funktion, die eine gefilterte Spalte umschließt, verhindert effizientes Filtern, und KI kann das Prädikat so umstrukturieren, dass die Spalte unverändert bleibt. Überprüfen Sie dies anhand des Ausführungsplans.

Ja, aber die Anwendung auf die Spalte erzwingt eine Auswertung für jede Zeile. Transformieren Sie stattdessen nach Möglichkeit die Konstante, damit die Spalte weiterhin effizient gefiltert werden kann.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: