Funktionen im SELECT-Clause (SingleRowFunctions)

https://oer-informatik.de/sql-dml-singlerowfunctions

tl/dr; (ca. 5 min Lesezeit): In der Projektion eines SELECT-Statements können Funktionen genutzt werden, die skalar oder aggregierend sind, die Zahlen, Zeichenketten, Datumswerte oder auch die Ablaufsteuerung betreffen. Dieser Artikel gibt eine kurze Übersicht. (zuletzt aktualisiert am 21.05.2023)

Unterschiedliche Arten von Funktionen in SQL-Statements:

Unterscheidung 1: Liefern die Funktionen bei mehrmaligem Ausführen immer das selbe Ergebnis?

deterministisch nicht determinisisch
gleicher Eingabewert = gleiches Ergebnis gleiche Parameter = ggf. unterschiedliche Ergebnisse
Beispiel: Summe aktuelle Zeit

(Ein Unterpunkt wäre hier noch die Idempotenz: zahl=zahl+1 ist zwar deterministisch, aber liefert bei mehrmaliger Ausführung andere Ergebnisse als bei einmaliger Ausführung)

Unterscheidung 2: Beziehen sich die Funktionen auf unterschiedliche Datensätze?

Aggregierende Funktionen Skalare Funktionen
Sogenannte multi row functions werten Attributwerte spaltenweise aus.
Details dazu in diesem Artikel zu GROUP-Functions
Das Gegenteil sind single row functions,
die lediglich Attributwerte innerhalb eines Datensatzes auswerten.
max(bruttokosten)
Gibt das Maximum aller Werte dieser Spalte aus
(anzahl*(preis-rabatt))*mwst
Berechnet für einen Datensatz (eine Zeile) einen Wert

Skalare Funktionen

Einteilung der Funktionen:

  • Numerische Funktionen

  • Zeichenkettenfunktionen

  • Datums- und Zeitfunktionen

  • Ablaufsteuerungsfunktionen

Numerische Funktionen

Datentyp MSSQL MySQL OracleDB postgreSQL SQLite
Runden ROUND(numeric_exp, integer_exp) ROUND ROUND(Zahl, (Stellen))
Gleitkommazahl formatiert ausgeben FORMAT(value, format) FORMAT ?
Datum/Zeit formatiert ausgeben FORMAT(value, format [, culture]) DATE_FORMAT strftime('%Y-%m-%d','datum')
Dokumentation / Übersicht Berechnungsfunktionen (Link) MS Doc zu numerischen Funktionen MS Doc zu Formatierungsfunktionen, T-SQL Doc MySQL Doc zu numerischen Funktionen Daumsfunktionen, Haupfunktionen

Zeichenkettenfunktionen

Datentyp MSSQL MySQL OracleDB postgreSQL SQLite
Zeichenkettenlänge
Anzahl der Zeichen
LEN (string_exp) CHAR_LENGTH(str) char_length ( text ) LENGTH
Zeichenkettenlänge
in Byte
DATALENGTH (string_exp) LENGTH(str) bit_length ( text )
Substring rechts RIGHT(RTRIM(str), pos) RIGHT(str,len) SUBSTR(X, Y)
Substring links LEFT (str, pos) LEFT(str,len) substring ( string text [ FROM start integer ] [ FOR count integer ] ) SUBSTR(X, -Y)
Substring mitte SUBSTRING (expression, start, length) SUBSTR(str, pos [, len]) SUBSTR(X, Y, Z)
Position eines Substring finden PATINDEX ('%pattern%', expression) INSTR(str,substr)
LOCATE(substr,str [,pos])
position ( substring text IN string text ) INSTR
Substring in Ausgabe ersetzen REPLACE (string_exp, string_pattern, string_replacement) REPLACE(str, from_str, to_str) REPLACE
Zeichenketten zusammenführen CONCAT (string_value1, string_value2, ...) CONCAT(str1,str2,...)
Whitespaces entfernen TRIM (string_exp)
LTRIM (string_exp)
RTRIM (string_exp)
TRIM([{BOTH \| LEADING \| TRAILING} [remstr] FROM] str)
LTRIM(str)
RTRIM(str)
LTRIM, RTRIM, TRIM
Mit RegEx suchen WHERE name REGEXP "^H.*-.*" WHERE regexp_like( text, pattern [, flags])
Mit RegEx ersetzen | regexp_replace ( text, pattern, replacement)
Dokumentation / Übersicht Stringfunktionen (Link) MS Doc MySQL Doc PostGreSQL-Doc SQLite Doc

Beispielabfragen zur Zeichenmanipulation:

Datums- und Zeitfunktionen

Datentyp MSSQL MySQL OracleDB postgreSQL SQLite
das aktuelle Datum CURRENT_DATE(), GETDATE(), CONVERT(date, SYSDATETIME()) CURDATE date('now')
die aktuelle Zeit CURRENT_TIME[(Zeit Genauigkeit)], CONVERT(time, SYSDATETIME()) CURTIME time('now','localtime')
Zeitdifferenz zweier Zeitangaben in Stunden DATEDIFF(hour, start, end) TIMESTAMPDIFF(HOUR, start, end) SELECT CAST ((julianday(end) - julianday(start)) AS INTEGER)
Zeitdifferenz zweier Datumsangaben in Tagen DATEDIFF(day, start, end) TIMESTAMPDIFF(DAY, start, end) SELECT CAST ((julianday(end) - julianday(start)) * 24 AS INTEGER)
Datum/Zeit formatiert ausgeben CAST(exp AS data_type[(length)]), FORMAT DATE_FORMAT, TIME_FORMAT SELECT strftime('%Y-%m-%d','datum')
Dokumentation / Übersicht Datumsfunktionen(Link) https://docs.microsoft.com/de-de/sql/odbc/reference/appendixes/time-date-and-interval-functions?view=sql-server-ver15 https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html https://www.sqlite.org/lang_datefunc.html

Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieses Werk und dessen Inhalte sind - sofern nicht angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Funktionen im SELECT-Clause (SingleRowFunctions)” von H. Stein (oer-informatik.de), Lizenz: CC BY 4.0. Die Quellen dieses Werks sind verfügbar auf https://gitlab.com/oer-informatik/db-sql/dml-select-queries.

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: