Ich muss 30 Minuten zu den Werten in einer Oracle Datumsspalte hinzufügen. Ich tue dies in meiner SELECT-Anweisung durch Angabe von
zu_char(Datum_und_Zeit + (.000694 * 31)`
was die meiste Zeit über gut funktioniert. Aber nicht, wenn die Zeit an der AM/PM-Grenze liegt. Wenn man zum Beispiel 30 Minuten zu 12:30
[was PM ist] addiert, erhält man 1:00
, was AM ist. Die Antwort, die ich erwarte, ist "13:00". Was ist der richtige Weg, dies zu tun?
Sie können nicht nur eine Anzahl von Tagen zu einem Datum hinzufügen, sondern auch Intervall-Datentypen verwenden, vorausgesetzt, Sie arbeiten mit Oracle 9i oder höher, die etwas leichter zu lesen sind,
SQL> ed
Wrote file afiedt.buf
SELECT sysdate, sysdate + interval '30' minute FROM dual
SQL> /
SYSDATE SYSDATE+INTERVAL'30'
-------------------- --------------------
02-NOV-2008 16:21:40 02-NOV-2008 16:51:40
Wenn der Datentyp des Feldes ein Datum oder ein Zeitstempel ist, sollte Oracle immer das richtige Ergebnis liefern, wenn Sie die richtige Zahl in Anzahl der Tage (oder in Ihrem Fall den richtigen Bruchteil eines Tages) addieren. Wenn Sie also versuchen, den Wert in 30 Minuten zu erhöhen, sollten Sie:
select field + 0.5/24 from table;
Anhand Ihrer Angaben glaube ich, dass Sie genau das versucht haben, und ich bin mir ziemlich sicher, dass es funktioniert.
Vergewissern Sie sich, dass Oracle weiß, dass die Startzeit PM ist, und dass Sie die Maske des HH24-Formats für die endgültige Ausgabe angeben.
SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time
FROM dual
TIME
---------
13:10
Hinweis: Das 'AM'
in HH:MI ist nur der Platzhalter für den AM/PM-Meridianindikator. Es könnte auch 'PM'
sein.