sql >> Databasteknik >  >> RDS >> Oracle

formatera intervall med to_char

du kan gjuta resultatet om du vill ha mindre precision:

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

Redigera följande OP-kommentar:

Från The Oracle Documentation (11gr1):

Intervalldatatyper har inga formatmodeller. För att justera deras presentation måste du därför kombinera karaktärsfunktioner som EXTRACERA och sammanfoga komponenterna.

Det verkar som att du måste manuellt använda EXTRACT för att uppnå önskad utdata:

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


Det här är inte särskilt elegant men det verkar vara det enda sättet att hantera mikrosekunders precision.



  1. Formatera ett tal som valuta i SQLite

  2. Introduktion till SQL-gruppering och sammanräkning

  3. Ställ in teckenuppsättningen och sorteringen av en databas i MariaDB

  4. PostgreSQL-distribution och underhåll med Ansible