Oracle
 sql >> Database >  >> RDS >> Oracle

intervallo di formattazione con to_char

potresti lanciare il risultato se vuoi meno precisione:

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

Modifica il seguente commento OP:

Da The Oracle Documentation (11gr1):

I tipi di dati di intervallo non hanno modelli di formato. Pertanto, per modificare la loro presentazione, è necessario combinare funzioni di carattere come ESTRATTO e concatenare i componenti.

Sembra che dovrai usare manualmente EXTRACT per ottenere l'output desiderato:

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


Questo non è molto elegante ma sembra che sia l'unico modo per gestire la precisione dei microsecondi.