Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Intervall mit to_char formatieren

Sie können das Ergebnis umwandeln, wenn Sie weniger Genauigkeit wünschen:

SQL> SELECT TO_DSINTERVAL('10 10:00:00') t_interval FROM dual;

T_INTERVAL
-----------------------------------------------------------
+000000010 10:00:00.000000000

SQL> SELECT CAST(TO_DSINTERVAL('10 10:00:00')
  2                 AS INTERVAL DAY(2) TO SECOND(3)) t_interval
  3    FROM dual;

T_INTERVAL
-----------------------------------------------------------
+10 10:00:00.000

Bearbeiten Sie den folgenden OP-Kommentar:

Aus der Oracle-Dokumentation (11gr1):

Intervalldatentypen haben keine Formatmodelle. Um ihre Darstellung anzupassen, müssen Sie daher Zeichenfunktionen wie EXTRACT kombinieren und die Komponenten verketten.

Es scheint, dass Sie EXTRACT manuell verwenden müssen, um die gewünschte Ausgabe zu erzielen:

SQL> SELECT to_char(extract(DAY FROM t_interval), 'fmS99999') || ' ' ||
  2         to_char(extract(HOUR FROM t_interval), 'fm00') || ':' ||
  3         to_char(extract(MINUTE FROM t_interval), 'fm00') || ':' ||
  4         to_char(extract(SECOND FROM t_interval), 'fm00.000')
  5    FROM (SELECT TO_DSINTERVAL('10 01:02:55.895') t_interval FROM dual)
  6  ;

TO_CHAR(EXTRACT(DAYFROMT_INTER
------------------------------
+10 01:02:55.895


Das ist nicht sehr elegant, aber es scheint die einzige Möglichkeit zu sein, mit der Genauigkeit von Mikrosekunden umzugehen.