sql >> Database >  >> RDS >> Oracle

formaat interval met to_char

je zou het resultaat kunnen casten als je minder precisie wilt:

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

Bewerk de volgende OP-opmerking:

Vanuit de Oracle-documentatie (11gr1):

Intervaldatatypes hebben geen formaatmodellen. Daarom moet u, om hun presentatie aan te passen, karakterfuncties zoals EXTRACT combineren en de componenten aaneenschakelen.

Het lijkt erop dat u EXTRACT handmatig moet gebruiken om de gewenste uitvoer te bereiken:

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


Dit is niet erg elegant, maar het lijkt erop dat dit de enige manier is om met microsecondenprecisie om te gaan.



  1. Kan de kolom die wordt gebruikt in een externe sleutelbeperking niet wijzigen

  2. Leveringsoptie tijdens het indienen van een gelijktijdig verzoek in R12.1.3

  3. Retourneer de parameters van een opgeslagen procedure of door de gebruiker gedefinieerde functie in SQL Server (T-SQL-voorbeelden)

  4. MySQL KOLOM TOEVOEGEN