TO_DSINTERVAL
を使用できます 機能
; CTEを使用してテーブルを複製する例:
WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT TO_DSINTERVAL('0 ' || time_field)
FROM some_table;
TO_DSINTERVAL('0'||TIME_FIELD)
---------------------------------------------------------------------------
+000000000 00:00:00.000000000
関数が認識できる形式にするには、「日」の部分を指定する必要があることに注意してください。したがって、ダミーの '0'
が先頭に追加されます。 文字列。
固定値クエリは、わずかに異なる形式を返します(または、少なくともわずかに異なる表示になります。間隔のdaaタイプにはフォーマットモデルがありません 日付とまったく同じ方法なので、正確に表現する方法がわかりません):
SELECT INTERVAL '00:00:00.000000' HOUR TO SECOND(6)
FROM DUAL;
INTERVAL'00:00:00.000000'HOURTOSECOND(6)
---------------------------------------------------------------------------
+00 00:00:00.000000
それを複製するには、キャストコード>できます 必要な場合はこれ:
WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT CAST(TO_DSINTERVAL('0 ' || time_field) AS INTERVAL DAY TO SECOND(6))
FROM some_table;
CAST(TO_DSINTERVAL('0'||TIME_FIELD)ASINTERVALDAYTOSECOND(6))
---------------------------------------------------------------------------
+00 00:00:00.000000
...または単に:
WITH some_table AS (SELECT '00:00:00.000000' AS time_field FROM dual)
SELECT CAST('0 ' || time_field AS INTERVAL DAY TO SECOND(6))
FROM some_table;
CAST('0'||TIME_FIELDASINTERVALDAYTOSECOND(6))
---------------------------------------------------------------------------
+00 00:00:00.000000
...これは@catcallが最初に提案したものとほぼ同じですが、これには '0'
も必要です。 先頭に追加するか、 ORA-01867
を取得します 。 (または、 HOUR TO SECOND
を使用しようとした場合 、 ORA-00963
、追加された日の値でも)。しかし、私はそれが暗黙の TO_DSINTERVAL
を実行していると推測します(そしてそれはほんの少しの教育を受けていますが、単なる推測です)。 または同様のものであり、明示的なものを使用したいと思うので、何が起こっているのかを確信していました。それは私だけかもしれませんが...
サンプルデータを使用して、私も ORA-01867
を取得します 、ただし、null値が原因です。 case
を使用できます 結果でそれをnullのままにするには:
SELECT CASE WHEN time_field IS NULL THEN null
ELSE CAST('0 ' || time_field AS INTERVAL DAY TO SECOND(6)) END
FROM some_table;
CASEWHENTIME_FIELDISNULLTHENNULLELSECAST('0'||TIME_FIELDASINTERVALDAYTOSECO
---------------------------------------------------------------------------
+00 10:00:00.000000
+00 12:00:00.000000
+00 15:00:00.000000
+00 17:00:00.000000
+00 20:00:00.000000
6 rows selected.