Im Gegensatz zu documentation kann die Funktion TO_CHAR()
für Intervalle nicht verwendet werden. Es erlaubt, INTERVAL-Werte zu verwenden, aber das Ergebnis ist immer dasselbe. An einem anderen Ort der documentation sagt:
Interval Datentypen haben keine Formatmodelle.
können Sie entweder EXTRACT() Funktion oder Sie können mit regulären Ausdrücken arbeiten:
WITH t AS
(SELECT INTERVAL '19' HOUR + INTERVAL '30' MINUTE AS i FROM dual)
SELECT
LPAD(EXTRACT(HOUR FROM i), 2, '0')||':'||LPAD(EXTRACT(MINUTE FROM i), 2, '0'),
REGEXP_SUBSTR(i, '\d{2}:\d{2}')
FROM t;
Normalerweise ist es nicht sehr klug ist Regular Expression auf Datums-/Zeitwerte zu verwenden. Da das Format INTERVAL
jedoch nicht von irgendwelchen NLS-Einstellungen abhängig ist, ist es eine machbare Option.
Nachteil von EXTRACT
ist, wenn Sie negative Intervalle haben. Solch ein Intervall würde wie -19:-30
geschrieben werden, da jede Komponente mit Minuszeichen (-) zurückgegeben wird. Beachten Sie auch, dass EXTRACT
NUMBER
Werte zurückgibt, so dass Sie sie manuell mit "0" auffüllen müssen.
Es sollte keine negativen Intervalle geben. Das OP sagte, dass sie diesen Datentyp verwenden **, um verschiedene Tageszeiten zu speichern **. – mathguy