:
NVL(time1, TO_DSINTERVAL('0 00:00:00'))
彼らは異なるデータ型であるため、 time1
はタイムスタンプで、固定値は間隔です。
NVL(time1, TIMESTAMP '1972-01-01 00:00:00')
を...それは@sagiが提案何本質的である - だけではなく、変換後の文字列リテラルのタイムスタンプを持つ:あなたは代わりにリテラルタイムスタンプを使用することができます。日付部分は、時間が深夜である限り、何でもかまいません。
また、わずかな変形を使用することもできます。
WITH table1 (id1, value1, time1) AS (
SELECT '123', 123, TIMESTAMP '2016-01-01 12:34:56.789'
FROM dual
)
SELECT NUMTODSINTERVAL(SUM(NVL(EXTRACT(HOUR FROM time1), 0)), 'HOUR') +
NUMTODSINTERVAL(SUM(NVL(EXTRACT(MINUTE FROM time1), 0)), 'MINUTE') AS HOURS
FROM table1 WHERE id1 = '123' AND value1 = 123;
HOURS
-----------------------------
+000000000 12:34:00.000000000
し、null値を持つ:
-nullでない値を提供するために、CTEと
SELECT NUMTODSINTERVAL(SUM(NVL(EXTRACT(HOUR FROM time1), 0)), 'HOUR') +
NUMTODSINTERVAL(SUM(NVL(EXTRACT(MINUTE FROM time1), 0)), 'MINUTE') AS HOURS
FROM table1 WHERE id1 = '123' AND value1 = 123
クイックデモ:あなただけゼロにする時間/分の数を必要とするので、
WITH table1 (id1, value1, time1) AS (
SELECT '123', 123, CAST(null AS TIMESTAMP)
FROM dual
)
SELECT NUMTODSINTERVAL(SUM(NVL(EXTRACT(HOUR FROM time1), 0)), 'HOUR') +
NUMTODSINTERVAL(SUM(NVL(EXTRACT(MINUTE FROM time1), 0)), 'MINUTE') AS HOURS
FROM table1 WHERE id1 = '123' AND value1 = 123;
HOURS
-----------------------------
+000000000 00:00:00.000000000
Upvoted、彼は彼が1年目で働きたいとは思っていません。 –
私のために働きませんでした:( –
私はこのようなものを使うと考えていました:NVL(time1、TO_DSINTERVAL( '0 00:00:00 '))....しかし、やった私のために働かない。 –