Benutzer-Werkzeuge

Webseiten-Werkzeuge


opendocks:oracle-sql-nutshell-doku:nutshell-doku-02

Dies ist eine alte Version des Dokuments!


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äter
  • SYSDATE - 1 ⇒ 1 Tag früher
  • SYSDATE + 1/24 ⇒ eine Stunde später
  • SYSDATE + 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

(Fällt auch unter Agregation) 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.

Zurück - Weiter

opendocks/oracle-sql-nutshell-doku/nutshell-doku-02.1775754467.txt.gz · Zuletzt geändert: 2026/04/09 19:07 von heiko

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki