次の SQL コマンド
select TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))) from table1
+000000000 00:03:01.954000 の形式の結果が生成されます。
format: +00 00:00:00.000 の結果を取得するために、to_char 関数に特別な形式を入力することは可能ですか?
精度を下げたい場合は、結果をキャストできます。
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
次の OP コメントを編集します: Oracle ドキュメント (11gr1)
から:
間隔データ型にはフォーマット モデルがありません。したがって、表示を調整するには、EXTRACT などの文字関数を組み合わせて、コンポーネントを連結する必要があります。
目的の出力を得るには、手動で 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_char() の形式は固定されているようです:(したがって、regexp_substrがオプションになる場合があります。たとえば、次のようになります。
SELECT regexp_substr (TO_DSINTERVAL ('10 10:00:00'), '\d{2} \d{2}:\d{2}:\d{2}\.\d{3}') t_interval FROM dual
まったく賢くなく、探している特別なフォーマット文字列でもないことはわかっていますが、出力が固定長であることを考えると、この答えは機能します。
SELECT SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 1, 1)
|| SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 9, 2)
|| ' '
|| SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 12, 12)
FROM table1;
また、丸めの代わりに小数秒を切り捨てるだけですが、あなたの例から、とにかくすべてゼロであると思います。
これはさらに恥ずかしいことですが、私は抵抗できませんでした。
SELECT SUBSTR(REPLACE(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00')))
, '0000000', '')
, 1, 16)
FROM table1;
SELECT W.SHIFT_NUMB || ' c: ' ||
TO_CHAR(TO_DATE('01.01.2012', 'dd.mm.yyyy') + W.TIMEFROM, 'HH24:MI') ||
' по: ' ||
TO_CHAR(TO_DATE('01.01.2012', 'dd.mm.yyyy') + W.TIMETO, 'HH24:MI'),
w.ID
FROM AC_WORK_SHIFT W
WHERE W.CLIENT_ID = GC
日付を追加して to_char ('HH24:MI') を使用するだけです!
正規表現 Oracle REGEXP_REPLACE を使用して、最後の部分 (または任意の部分) を取り除くことができます。
テーブル 1 から REGEXP_REPLACE( TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), '..*') を選択します