8

次の 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 関数に特別な形式を入力することは可能ですか?

4

7 に答える 7

21

精度を下げたい場合は、結果をキャストできます。

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


これはあまりエレガントではありませんが、マイクロ秒の精度を扱う唯一の方法のようです。

于 2009-06-09T14:42:22.707 に答える
9

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
于 2010-11-29T12:24:06.043 に答える
4

まったく賢くなく、探している特別なフォーマット文字列でもないことはわかっていますが、出力が固定長であることを考えると、この答えは機能します。

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;
于 2009-06-09T15:30:33.827 に答える
1
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') を使用するだけです!

于 2018-03-21T15:53:22.157 に答える
0

正規表現 Oracle REGEXP_REPLACE を使用して、最後の部分 (または任意の部分) を取り除くことができます。

テーブル 1 から REGEXP_REPLACE( TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), '..*') を選択します

于 2016-02-02T17:20:35.880 に答える