Sie nicht tun können, was Sie vorgeschlagen:
NVL(time1, TO_DSINTERVAL('0 00:00:00'))
, weil sie unterschiedliche Datentypen sind; time1
ist ein Zeitstempel, während der feste Wert ein Intervall ist. Sie könnten einen Zeitstempel wörtlichen statt:
NVL(time1, TIMESTAMP '1972-01-01 00:00:00')
... aber das ist im Wesentlichen, was @sagi vorgeschlagen - nur mit einem Zeitstempel wörtlichen anstelle einer konvertierten Zeichenkette. Der Datumsteil spielt keine Rolle, das kann alles sein, solange die Zeit um Mitternacht ist.
Sie könnten auch eine leichte Variante verwenden; da Sie nur die Anzahl der Stunden/Minuten brauchen, um Null: einen nicht-Null-Wert
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
Schnell Demo mit einem WAK zur Verfügung zu stellen:
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
Und mit einem Nullwert:
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, aber ich bezweifle, dass er mit dem Jahr 1 arbeiten möchte. –
Hat nicht funktioniert für mich :( –
Ich dachte, so etwas zu verwenden: NVL (time1, TO_DSINTERVAL ('0 00:00:00 ')) .... aber tat nicht für mich arbeiten. –