sql >> Databáze >  >> RDS >> Oracle

formátovat interval s to_char

pokud chcete méně přesnosti, můžete výsledek odeslat:

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

Upravte následující komentář OP:

Z dokumentace Oracle (11gr1):

Datové typy intervalů nemají modely formátu. Chcete-li tedy upravit jejich prezentaci, musíte kombinovat funkce znaků, jako je EXTRACT, a zřetězit komponenty.

Zdá se, že k dosažení požadovaného výstupu budete muset ručně použít EXTRACT:

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


To není příliš elegantní, ale zdá se, že je to jediný způsob, jak se vypořádat s přesností na mikrosekundy.



  1. Proč místo LIKE a ~ funguje pouze SIMILAR TO, když provádíte shodu regulárních výrazů s alternativami

  2. Jak protokolovat dotazy v PostgreSQL

  3. Chyba serveru SQL 4104:Vícedílný identifikátor nelze svázat.

  4. jak bezpečné jsou připravené výpisy CHOP