DATE(<expression-1> [ , <expression-2> ] )
Die Funktion DATE dient zur Umwandeln eines Varchar-Ausdrucks in ein Datumsformat. Der 2. Varchar-Ausdruck gibt das Format an (siehe Java 8 SimpleDateFormat). Dabei wird ein möglicher Zeitanteil ignoriert und nur der Datumsanteil verwendet.
Das Ergebnis hat den Datentyp DATE.
Folgende Formatanweisungen sollten verwendet werden:
Buchstabe | Bedeutung | Beispiel | Ergebnis |
---|---|---|---|
y | Jahr | yyyy; yy | 2011; 11 |
M | Monat | MM;M | 01; 1 |
d | Tag | dd;d | 04; 4 |
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
Hinweise
Es gibt auch die Formatanweisungen Y (Week Year) und D (Day in Year), die man in der Regel nicht verwenden sollte.
Y benutzt die Kalenderwoche, in der ein gegebenes Datum liegt, um damit das Jahr festzulegen. So liegt der 29.12.1997 in der Kalenderwoche 1 des Jahres 1998. Das "Wochenjahr" ergibt für ihn deshalb das Jahr 1998. Das liefert ein verblüffendes, aber korrektes Ergebnis:
SELECT DATE('1998-12-29', 'YYYY-MM-dd')
1997-12-29
D wird für die fortlaufende Nummer eines Tages verwendet. Zusammen mit der Jahreszahl kann man damit z.B. einen Tag mit seiner Nummer im Jahr finden:
SELECT DATE('2021-189', 'yyyy-D')
2021-07-08
Beim Excel-Treiber ist es derzeit bei Datums-Feldern nicht möglich. Die Umrechnung muss nachdem die Daten als Number oder String geladen wurden mit folgender Formel erfolgen: Datum vom 1.1.1900 - 2 + die Datumszahl aus Excel. Beispiel:
DATE '1900-01-01' - 1 - CASE WHEN datum_aus_excel > 58 THEN 1 ELSE 0 END + datum_aus_excel
Der 1.1.1900 entspricht der Datumszahl 1. Bei Excel ist der 29.2.1900 ein Schalttag (um kompatibel mit Lotus 1-2-3 zu sein). Deshalb muss noch ein Tag abgezogen werden, wenn das Datum hinter dem 28.2.1900 liegt.
Bei DATE Funktion wichtig das richtige Format zu benutzen (yyyy ist nicht gleich YYYY). Hier sind nochmal die DateFormats
SELECT DATE('2021-12-24', 'yyyy-MM-dd'), DATE('20211224', 'YYYYMMDD'), DATE('24.12.2021 18:30:10', 'DD.MM.YYYY HH:mm:ss');
Ausgabe
column_1 | column_2 | column_3 |
---|---|---|
2021-12-24 | 2020-12-27 | 2020-12-27 |
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 Wert.
Verwendet java Long.valueOf() und wirf einen Laufzeitfehler, wenn der String nicht dem Nummerformat entspricht.
Das Ergebnis hat den Datentyp VARCHAR.
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"
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