DATE(<expression-1> [ , <expression-2> ] )
Die Funktion DATE wandelt einen Varchar- oder Bigint-Ausdruck in ein Datum um.
Ohne den 2. Parameter werden ISO-Daten erkannt: yyyy, yyyy-MM oder yyyy-MM-dd (Monat und Tag zweistellig). Fehlt der Monat, gilt Januar; fehlt der Tag, gilt der 1. Ein ISO-Zeitstempel wird ebenfalls akzeptiert; verwendet wird nur der Datumsanteil.
Ist der 1. Ausdruck ein Bigint (ohne 2. Parameter), wird er als Anzahl ganzer Tage seit der Unix-Epoche 1970-01-01 interpretiert. 0 ist der 1. Januar 1970, positive Werte liegen danach, negative davor. Ein Format als 2. Parameter ist bei Bigint nicht zulässig.
Mit zwei Parametern gibt der 2. Varchar-Ausdruck das Format an (siehe DateTimeFormatter). Ein möglicher Zeitanteil wird ignoriert, es zählt nur der Datumsanteil.
Optionale Formatteile stehen in eckigen Klammern, z. B. 'yyyy-MM-dd[ HH[:mm]]'. Ein Leerzeichen direkt vor [ wird in den optionalen Block gezogen: 'yyyy-MM-dd [HH:mm]' gilt wie 'yyyy-MM-dd[ HH:mm]' und erkennt ein Datum mit oder ohne Uhrzeit. Ohne diese Verschiebung wäre das Leerzeichen Pflicht.
Fehlen Monat oder Tag, werden nur die vorhandenen Teile verwendet (fehlender Monat/Tag = 1).
Ist der Wert oder das Format NULL oder der Wert leer, ist das Ergebnis NULL.
Das Ergebnis hat den Datentyp DATE.
Folgende Formatanweisungen sollten verwendet werden:
| Buchstabe | Bedeutung | Beispiel | Ergebnis |
|---|---|---|---|
| y / u | Jahr | yyyy; yy | 2011; 11 |
| M | Monat | MM; M; M[M] | 01; 1; 1 oder 01 |
| d | Tag | dd; d; d[d] | 04; 4; 4 oder 04 |
| [ ] | optionaler Abschnitt | yyyy-MM-dd[ HH:mm] | Datum mit oder ohne Uhrzeit |
Für ein- oder zweistellige Monat- und Tageszahlen M[M] und d[d] verwenden:
SELECT DATE('2026-9-1', 'yyyy-M[M]-d[d]')
, DATE('2026-09-01', 'yyyy-M[M]-d[d]');
Ausgabe
| column_1 | column_2 |
|---|---|
| 2026-09-01 | 2026-09-01 |
Ein Beispiel könnte so aussehen. Hat die Spalte d (Typ Zeichenkette) den Wert '2011-11-1', so liefert
SELECT DATE(d, 'yyyy-M-d')
2011-11-01
Für Excel-Datumsangaben ist die DATE Funktion im Excel-Treiber überschrieben, siehe auch hier.
Ohne Format: Jahr, Jahr-Monat oder volles Datum.
SELECT DATE('2026')
, DATE('2026-02')
, DATE('2026-02-18');
Ausgabe
| column_1 | column_2 | column_3 |
|---|---|---|
| 2026-01-01 | 2026-02-01 | 2026-02-18 |
SELECT DATE('2024-03-27')
, DATE('27.5.2024', 'dd.MM.yyyy')
, DATE('20211224', 'yyyyMMdd')
, DATE('24.12.2021 18:30:10', 'dd.MM.yyyy[ HH:mm:ss]')
, DATE('2024-03', 'yyyy-MM');
Ausgabe
| column_1 | column_2 | column_3 | column_4 | column_5 |
|---|---|---|---|---|
| 2024-03-27 | 2024-05-27 | 2021-12-24 | 2021-12-24 | 2024-03-01 |
Optionale Formatteile und fehlende Felder im Wert:
SELECT DATE('2024-03-27', 'yyyy-MM-dd [HH:mm]')
, DATE('2024-03-27 14:30', 'yyyy-MM-dd [HH:mm]')
, DATE('2024', 'yyyy');
Ausgabe
| column_1 | column_2 | column_3 |
|---|---|---|
| 2024-03-27 | 2024-03-27 | 2024-01-01 |
Unix-Epoche: der Bigint-Wert ist die Anzahl Tage seit 1970-01-01.
SELECT DATE(0)
, DATE(1)
, DATE(-1);
Ausgabe
| column_1 | column_2 | column_3 |
|---|---|---|
| 1970-01-01 | 1970-01-02 | 1969-12-31 |
TIMESTAMP(<expression-1> [ , <expression-2> ] )
Die Funktion TIMESTAMP wandelt einen Varchar- oder Bigint-Ausdruck in einen Zeitstempel (Datum und Uhrzeit) um.
Die Zeitzone im Wert ist optional. Ohne Zone gilt die lokale Uhrzeit; mit Z (Offset oder Zonenname) wird in die lokale Zeit umgerechnet.
Ist der 1. Ausdruck ein Bigint (ohne 2. Parameter), wird er als Anzahl Sekunden seit der Unix-Epoche 1970-01-01 00:00:00 UTC interpretiert und in die lokale Zeitzone umgerechnet. Ein Format als 2. Parameter ist bei Bigint nicht zulässig.
Ist der Wert oder das Format NULL oder der Wert leer, ist das Ergebnis NULL.
Ohne den zweiten Parameter werden gängige ISO-ähnliche Formate erkannt, z. B.:
2026, 2026-02, 2026-02-18 (fehlender Monat = Januar, fehlender Tag = 1, Uhrzeit Mitternacht)2024-03-27 14:30:002024-03-27T14:30:00Z, Offset (+02:00) oder Zonenname (GMT)Ohne Zone bleibt die Uhrzeit unverändert, Z ist UTC:
SELECT TIMESTAMP('2026-09-01 00:00')
, TIMESTAMP('2026-09-01 00:00Z');
In der Zeitzone Europe/Berlin (September = MESZ, UTC+2) ergibt das:
| column_1 | column_2 |
|---|---|
| 2026-09-01 00:00:00.0 | 2026-09-01 02:00:00.0 |
Mit zwei Parametern gibt der 2. Varchar-Ausdruck das Format an (siehe DateTimeFormatter). Optionale Teile stehen in [], z. B. 'yyyy-MM-dd[ HH:mm[:ss]][X]' oder 'yyyy-M-d HH:mm:ss[ z]'. Damit ist die Zone im Wert optional: '2026-09-01 00:00' und '2026-09-01 00:00Z' passen zum selben Muster. Fehlen Uhrzeitfelder, wird Mitternacht bzw. 0 für Minute/Sekunde eingesetzt.
Häufige Zeit- und Zonenbuchstaben:
| Buchstabe | Bedeutung | Beispiel |
|---|---|---|
| H | Stunde 0–23 | HH; H |
| m | Minute | mm; m |
| s | Sekunde | ss; s |
| z | Zonenname | GMT; CET |
| X / XXX | Offset | Z; +02:00 |
Das Ergebnis hat den Datentyp TIMESTAMP.
Ohne zweiten Parameter (ISO-ähnlich) und mit festem Muster:
SELECT TIMESTAMP('2024-03-27 14:30:00')
, TIMESTAMP('2024-03-27T15:45:30')
, TIMESTAMP('2024-03-27')
, TIMESTAMP('27.03.2024 16:00', 'dd.MM.yyyy HH:mm');
Ausgabe
| column_1 | column_2 | column_3 | column_4 |
|---|---|---|---|
| 2024-03-27 14:30:00.0 | 2024-03-27 15:45:30.0 | 2024-03-27 00:00:00.0 | 2024-03-27 16:00:00.0 |
Optionale Formatteile: dasselbe Muster erkennt Datum allein, mit Stunde/Minute oder mit Sekunden.
SELECT TIMESTAMP('2024-03-27', 'yyyy-MM-dd[ HH:mm[:ss]]')
, TIMESTAMP('2024-03-27 14:30', 'yyyy-MM-dd[ HH:mm[:ss]]')
, TIMESTAMP('2024-03-27 14:30:45', 'yyyy-MM-dd[ HH:mm[:ss]]');
Ausgabe
| column_1 | column_2 | column_3 |
|---|---|---|
| 2024-03-27 00:00:00.0 | 2024-03-27 14:30:00.0 | 2024-03-27 14:30:45.0 |
Fehlende Felder im Wert: es werden nur die vorhandenen Teile verwendet (Tag = 1, Minute/Sekunde = 0).
SELECT TIMESTAMP('2024-03', 'yyyy-MM')
, TIMESTAMP('2024-03-27 14', 'yyyy-MM-dd HH');
Ausgabe
| column_1 | column_2 |
|---|---|
| 2024-03-01 00:00:00.0 | 2024-03-27 14:00:00.0 |
Optionale Zeitzone im Muster: ist eine Zone oder ein Offset angegeben, wird sie verwendet und in die lokale Zeit umgerechnet. Fehlt sie, bleibt die lokale Uhrzeit unverändert.
SELECT TIMESTAMP('2026-10-01 15:30:00', 'yyyy-M-d HH:mm:ss[ z]')
, TIMESTAMP('2026-10-01 15:30:00 GMT', 'yyyy-M-d HH:mm:ss[ z]')
, TIMESTAMP('2024-03-27T15:45:30Z')
, TIMESTAMP('2024-03-27T15:45:30+02:00');
In der Zeitzone Europe/Berlin (Oktober = MESZ, UTC+2; März = MEZ, UTC+1) ergibt das:
| column_1 | column_2 | column_3 | column_4 |
|---|---|---|---|
| 2026-10-01 15:30:00.0 | 2026-10-01 17:30:00.0 | 2024-03-27 16:45:30.0 | 2024-03-27 14:45:30.0 |
15:30 GMT und 15:30+00:00 sind derselbe Zeitpunkt:
SELECT TIMESTAMP('2026-10-01 15:30:00 GMT', 'yyyy-M-d HH:mm:ss[ z]')
= TIMESTAMP('2026-10-01 15:30:00+00:00', 'yyyy-M-d HH:mm:ss[XXX]');
Ausgabe: true
Unix-Epoche: der Bigint-Wert ist die Anzahl Sekunden seit 1970-01-01 00:00:00 UTC.
SELECT TIMESTAMP(0) = TIMESTAMP('1970-01-01T00:00:00Z')
, TIMESTAMP(1) = TIMESTAMP('1970-01-01T00:00:01Z');
Ausgabe: true, true
LTRIM(<expression-1> [ , <expression-2> ] )
Löschen von führenden Zeichen im 1. Varchar-Ausdruck.
Der 2. Varchar-Ausdruck ist optional und gibt einen Satz von Zeichen an, die gelöscht werden sollen. Wenn nicht angegeben, dann wird der Satz auf Leerzeichen beschränkt.
Löscht am Anfang des ersten Ausdrucks alle Zeichen, die in diesem Satz sind, bis zum ersten Zeichen außerhalb des Satzes.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT LTRIM(' das bleibt'), LTRIM('!"$% &%$das bleibt', ' !"$%&');
Ausgabe
column_1 column_2
-------- --------
das bleibt das bleibt
RTRIM(<expression-1> [ , <expression-2> ] )
Löschen von endenden Zeichen im 1. Varchar-Ausdruck.
Der 2. Varchar-Ausdruck ist optional und gibt einen Satz von Zeichen an, die gelöscht werden sollen. Wenn nicht angegeben, dann wird der Satz auf Leerzeichen beschränkt.
Löscht am Ende des ersten Ausdrucks alle Zeichen, die in diesem Satz sind, bis zum ersten Zeichen außerhalb des Satzes.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT RTRIM('das bleibt '), RTRIM('das bleibt!"$% &%$', ' !"$%&');
Ausgabe
column_1 column_2
-------- --------
das bleibt das bleibt
TRIM(<expression>)
Löschen von führenden und endenden "Whitespaces" Zeichen im Varchar-Ausdruck.
Die Funtion verwendet die java Funktion trim (siehe Java 8 trim).
Dabei werden alle zeichen im Ascii Code kleiner oder gleich Leerzeichen als Whitespace angesehen.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT TRIM(' das bleibt '), TRIM(CHR(9) || ' das bleibt ' || CHR(13) || CHR(10));
Ausgabe
column_1 column_2
-------- --------
das bleibt das bleibt
LOWER(<expression>)
Alle Zeichen im Varchar-Ausdruck in Kleinbuchstaben umwandeln.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT LOWER('Aa123'), lower('GeMiScHt');
Ausgabe
column_1 column_2
-------- --------
aa123 gemischt
UPPER(<expression>)
Alle Zeichen im Varchar-Ausdruck in Großbuchstaben umwandeln.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT Upper('Aa123'), UPPER('GeMiScHt');
Ausgabe
column_1 column_2
-------- --------
AA123 GEMISCHT
BIGINT(<expression>)
Umwandeln des Varchar-Ausdruck in einen numerischen, ganzzahlingen Wert.
Verwendet java Long.valueOf() und wirf einen Laufzeitfehler, wenn der String nicht dem Nummernformat entspricht.
Das Ergebnis hat den Datentyp BIGINT.
SELECT 1*'123';
Ausgabe
Implicit Conversion not yet implemented
SELECT 1*BIGINT('123');
Ausgabe
column_1
--------
123
SELECT 1*BIGINT('A123');
Ausgabe
java.lang.NumberFormatException: For input string: "A123"
DOUBLE(<expression>)
Umwandeln des Varchar-Ausdruck in einen numerischen Dezimalwert.
Verwendet java Double.valueOf() und wirf einen Laufzeitfehler, wenn der String nicht dem Nummernformat entspricht.
Das Ergebnis hat den Datentyp DOUBLE.
SELECT 9*'3.14159';
Ausgabe
Implicit Conversion not yet implemented
SELECT 9*'DOUBLE(3.14159)';
Ausgabe
column_1
--------
28.27431
SELECT 1*DOUBLE('A123');
Ausgabe
java.lang.NumberFormatException: For input string: "A123"
ASCII(<expression>)
Das erste Zeichen im Varchar-Ausdruck in den ASCII-Wert umwandeln.
Das Ergebnis hat den Datentyp BIGINT.
SELECT ASCII('A'), ascii('ABC');
Ausgabe
column_1 column_2
-------- --------
65 65
LENGTH(<expression>)
Die Länge einses Varchar-Ausdrucks ermitteln.
Das Ergebnis hat den Datentyp BIGINT.
SELECT LENGTH('A'), lengTH('ABC');
Ausgabe
column_1 column_2
-------- --------
1 3
CHR(<expression>)
Umwandeln des numerischen Ausdrucks in das dazugehörige ASCII-Zeichen
Das Ergebnis hat den Datentyp VARCHAR.
SELECT CHR(65), chr(35);
Ausgabe
column_1 column_2
-------- --------
A #
LPAD(<expression-1>, <expression-2> [ , <expression-3> ])
Den 1. Varchar-Ausdruck links mit dem 3. Varchar-Ausdruck auffüllen, bis die Länge des 2. Bigint-Ausdruck erreicht ist.
Der 3. Varchar-Ausdruck ist optional. Wird er nicht angegeben, so wird mit Leerzeichen aufgefüllt.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT LPAD('x', 10), LPAD('x', 10, '1'), LPAD('xy', 10, 'abc'), lPad('xxxxxxxxxx', 10, '1');
Ausgabe
column_1 column_2 column_3 column_4
-------- -------- -------- --------
x 111111111x abcabcabxy xxxxxxxxxx
Im 3. Beispiel wird erst der 3. Ausdruck so oft eingefügt, wie er komplett reinpasst. Danach werden rechts die Zeichen abgeschnitten, die nicht mehr als Ergänzung reinpassen
RPAD(<expression-1>, <expression-2> [ , <expression-3> ])
Den 1. Varchar-Ausdruck rechts mit dem 3. Varchar-Ausdruck auffüllen, bis die Länge des 2. Bigint-Ausdruck erreicht ist.
Der 3. Varchar-Ausdruck ist optional. Wird er nicht angegeben, so wird mit Leerzeichen aufgefüllt.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT RPAD('x', 10), RPAD('x', 10, '1'), RPAD('xy', 10, 'abc'), rPad('xxxxxxxxxx', 10, '1');
Ausgabe
column_1 column_2 column_3 column_4
-------- -------- -------- --------
x x111111111 xyabcabcab xxxxxxxxxx
Im 3. Beispiel wird erst der 3. Ausdruck so oft eingefügt, wie er komplett reinpasst. Danach werden rechts die Zeichen abgeschnitten, die nicht mehr als Ergänzung reinpassen
SUBSTR(<expression-1>, <expression-2> [ , <expression-3> ])
Ausgabe von Teilen des 1. Varchar-Ausdrucks.
Der 2. Bigint-Ausdruck gibt die Startposition (beginnend mit 1) und der optionale 3. Bigint-Ausdruck die Länge. Der 3. Bigint-Ausdruck ist optional. Wird er nicht angegeben, dann wird der Rest ab der Startposition genommen. Ist er länger als die verbleibende Länge , dann wird auch der Rest ab der Startposition zurückgegeben.
Das Ergebnis hat den Datentyp VARCHAR.
SELECT SUBSTR('12345678', 4), substr('12345678', 2, 4), SUBSTR('12345678', 8, 4);
Ausgabe
column_1 column_2 column_3
-------- -------- --------
45678 2345 8
SELECT SUBSTR('12345678', 9);
Ausgabe
[position=1:27] Index out of bounds
INSTR(<expression-1>, <expression-2> [ , <expression-3> [ , <expression-4> ] ])
Sucht im 1. Varchar-Ausdrucks den 2. Varchar-Ausdruck.
Wenn der 3. Bigint-Ausdruck angegeben wurde, dann beginnt die Suche ab der entsprechenden Position. Der zusätzliche 4. Bigint-Ausdruck gibt an, das wievielte Auftreten vom 2. Varchar Ausdruck gesucht werden soll.
Ist die Suche nicht erfolgreich, dann wird der Wert 0 zurückgegeben.
Das Ergebnis hat den Datentyp Bigint.
SELECT instr('12341234', '1'), INSTR('12341234', '21'), INSTR('12341234', '1', 6), INSTR('12341234', '1', 1, 2);
Ausgabe
column_1 column_2 column_3 column_4
-------- -------- -------- --------
1 0 0 5
REPLACE(<expression-1>, <expression-2>, <expression-3>)
Im 1. Varchar-Ausdruck Austauschen alle Auftreten vom 2. Varchar-Ausdruck durch den 3. Varchar-Ausdruck.
Die Funtion verwendet die java Funktion replace (siehe Java 8 replace).
Das Ergebnis hat den Datentyp VARCHAR.
SELECT REPLACE('AAAdas bleibtAAAAA', 'A', 'B'), REPLACE('AAAdas bleibtAAAAA', 'B', ''), REPLACE('AAA', 'A', '');
Ausgabe
column_1 column_2 column_3
-------- -------- --------
BBBdas bleibtBBBBB AAAdas bleibtAAAAA
REGEXP_REPLACE(<expression-1>, <expression-2>, <expression-3>)
Im 1. Varchar-Ausdruck werden alle Treffer des regulären Ausdrucks gegeben im 2. Varchar-Ausdruck durch den 3. Varchar-Ausdruck ausgetauscht.
Die Funtion verwendet die java Funktion replace (siehe Java 8 replaceAll).
Das Ergebnis hat den Datentyp VARCHAR.
SELECT REGEXP_REPLACE('AAAdas bleibtBUHZ', '[A-Z]', 'B'), REGEXP_REPLACE('AAAdas bleibtAAAAA', 'B', ''), REGEXP_REPLACE('AAA', '.', '');
Ausgabe
column_1 column_2 column_3
-------- -------- --------
BBBdas bleibtBBBB AAAdas bleibtAAAAA