Oracle
 sql >> Base de données >  >> RDS >> Oracle

intervalle de format avec to_char

vous pouvez caster le résultat si vous voulez moins de précision :

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

Modifier le commentaire OP suivant :

De la documentation Oracle (11gr1) :

Les types de données d'intervalle n'ont pas de modèles de format. Par conséquent, pour ajuster leur présentation, vous devez combiner des fonctions de caractères telles que EXTRAIRE et concaténer les composants.

Il semble que vous devrez utiliser EXTRACT manuellement pour obtenir le résultat souhaité :

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


Ce n'est pas très élégant mais il semble que ce soit la seule façon de gérer la précision à la microseconde.