Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Feldformatierungen, Suchen & Ersetzen von Feldinhalten
TO_CHAR()
Wird benutzt, um den Inhalt eines Feldes in einen String umzuwandeln.
Beispiel:
SELECT to_char('12345,69','$99,999.99') geld FROM dual; GELD ______________ $12,345.69 -- Oder wenn immer die Währung der lokalen Einstellung benutzt werden soll SELECT to_char('12345,69','$99,999.99') geld FROM dual; GELD ______________ $12,345.69
Wichtig! Wenn der Wert, der mit TO_CHAR vor der Ausgabe noch einer Berechnung unterzogen werden muss, dann muss die Berechnung vor der Umwandlung von to_char passieren. Sprich die Berechnung läuft innerhalb der Klammern des to_char Operators:
SELECT to_char(12345.69 *2,'L99,999.99') geld FROM dual; GELD _____________________ €24,691.38
TO_DATE()
Wandelt einen gegebenen Zahlenstring in einen Zeitstempel um.
Beispiel:
-- Die default Ausgabe ist DD.MM.YY SELECT to_date('2026.01.06', 'YYYY.DD.MM') datum FROM dual; DATUM ___________ 01.06.26
Folgende Formatierungen für Zeitstempel gibt es:
- DD : Tag 01-31
- MM : Monat 01-12
- MON / Mon : Monatskürzel (3-letter)
- MONTH / Month : Voll ausgeschriebener Monat
- YYYY : 4-Stellige Jahreszahl
- YY : 2-Stellige Jahreszahl
- HH24 : Stunden 1-23
- HH : Stunden 1-12
- MI : Minuten
- SS : Sekunden
- AM / PM : Platzhalter für die Tageszeit. Egal welches von beiden gesetzt ist, Oracle wird hier immer die richtige Tageszeit angeben.
Beispiel:
SELECT to_char(sysdate,'HH24:MI:SS') "24H Format", to_char(sysdate, 'HH:MI:SS AM') "12H Format" FROM dual; 24H Format 12H Format _____________ ______________ 15:40:50 03:40:50 PM
ADD_MONTHS()
Addiert auf ein gegebenes Datum eine angegebene Zahl von Monaten.
Beispiel:
SELECT sysdate, add_months(sysdate, 2) future_date FROM dual; SYSDATE FUTURE_DATE ___________ ______________ 01.04.26 01.06.26
Zusatzinfo:
Bei größeren Sprüngen, wie z.B. Jahren, kann man auch mit 12 rechnen.
Beispiel:
-- Zeigt das Systemdatum plus 3 Jahre SELECT add_months(sysdate, 12*3) FROM dual;
Braucht man einen Zeitstempel kleiner als einen Monat, kann man mit SYSDATE direkt rechnen, wobei '1' einem Tag entspricht (Dies gilt für jede Art von Zeitstempel).
Da SYSDATE per default nur das Datum liefert, muss man es mit TO_CHAR entsprechend formatieren.
SYSDATE + 3=⇒ 3 Tage späterSYSDATE - 1=⇒ 1 Tag früherSYSDATE + 1/24=⇒ eine Stunde späterSYSDATE + 1/1440=⇒ eine Minute später
Beispiel:
-- Aufaddieren einer Stunde. Da SYSDATE per default nur das Datum liefert, muss man es mit TO_CHAR entsprechend formatieren. SELECT to_char(sysdate, 'DD.MM.YYYY HH24:MI:SS') jetzt , to_char(sysdate + 1/24, 'DD.MM.YYYY HH24:MI:SS') zukunft FROM dual; JETZT ZUKUNFT ______________________ ______________________ 01.04.2026 14:53:20 01.04.2026 15:53:20
NEXT_DAY()
Berechnet das Datum eines gegebenen Tages ab einem bestimmten Datum.
Beispiel:
SELECT next_day('01.06.26', 'MONDAY') "Nächster Montag" FROM dual; Nächster Montag __________________ 08.06.26
VORSICHT!
In dem Beispiel oben wird der 08.06.26 errechnet. Dies bedeutet, dass der 01.06.26 ebenfalls ein Montag ist.
Sollte die Aufgabe sein, den ersten Montag im Monat zu finden, dann MUSS man ab Ultimo des Vormonats suchen!
Das könnte z.B. wie folgt aussehen:
SELECT next_day(to_date('01.06.26')-1, 'MONDAY') "first Monday on Month" FROM dual; FIRST Monday ON MONTH ________________________ 01.06.26
Um sicher zu sein, dass MONDAY auch als Montag erkannt wird, sollte man NLS_DATE_LANGUAGE=ENGLISH setzen.
ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'; -- Anzeigen aller NLS Werte: SHOW NLS -- oder speziell nur NLS_DATE_LANGUAGE SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_LANGUAGE'; VALUE ___________ AMERICAN
CASE
Wird in der SELECT Klausel zum Suchen & Ersetzen von Rückgabewerten einzelner Felder benutzt.
Dabei kann man das Feld entweder hinter den CASE setzen oder man baut es in den WHEN Operator ein.
Beispiel 1:
SELECT DISTINCT JOB_ID, CASE job_id WHEN 'AD_PRES' THEN 'A' WHEN 'ST_MAN' THEN 'B' WHEN 'IT_PROG' THEN 'C' ELSE '0' END grade FROM EMPLOYEES;
Hier hat man eine absolute Bedingung. Der Feldwert ist richtig, wenn er einen bestimmten String hat. Man kann aber auch mit Vergleichsoperatoren gegen den Feldwert arbeiten. Beispiel 2:
SELECT last_name, CASE WHEN employee_id < 111 THEN 'too small' WHEN employee_id = 111 THEN 'PERFECT' WHEN employee_id > 111 THEN 'to big' END "ID is" FROM employees;
Hier wird anstelle der employee_id ein entsprechender Ersatz zurückgegeben.
DECODE()
Funktioniert ähnlich wie Beispiel 1 von CASE.
Beispiel:
SELECT DISTINCT job_id, DECODE(job_id, 'AD_PRES', 'A', 'ST_MAN', 'B', 'IT_PROG', 'C', '0') grade FROM EMPLOYEES;
Allerdings ist hier von Oracle die Empfehlung, besser CASE zu nutzen, weil dies im ANSI-SQL vorhanden ist.
DECODE ist ein Operator, der nur in Oracle-SQL vorkommt und er ist schlechter zu lesen als die CASE Syntax.
DECODE kommt nur noch in altem Oracle-SQL-Code vor.
