Saya perlu menambahkan 30 menit ke nilai dalam kolom tanggal Oracle. Saya melakukan ini dalam pernyataan SELECT saya dengan menentukan
to_char(date_and_time + (.000694 * 31)
yang bekerja dengan baik sebagian besar waktu. Tetapi tidak ketika waktu berada pada batas AM/PM. Sebagai contoh, menambahkan 30 menit ke 12:30
[yang merupakan PM] menghasilkan 1:00
yang merupakan AM. Jawaban yang saya harapkan adalah 13:00
. Apa cara yang benar untuk melakukan ini?
Selain dapat menambahkan sejumlah hari ke tanggal, Anda dapat menggunakan tipe data interval dengan asumsi Anda menggunakan Oracle 9i
atau yang lebih baru, yang dapat lebih mudah dibaca,
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
Jika tipe data dari field tersebut adalah tanggal atau timestamp, Oracle akan selalu memberikan hasil yang benar jika Anda menambahkan angka yang benar yang diberikan dalam jumlah hari (atau pecahan yang benar dari satu hari dalam kasus Anda). Jadi, jika Anda mencoba untuk menambahkan nilai dalam 30 menit, Anda harus menggunakan:
select field + 0.5/24 from table;
Berdasarkan informasi yang Anda berikan, saya yakin inilah yang Anda coba lakukan dan saya cukup yakin ini berhasil.
Pastikan bahwa Oracle memahami bahwa waktu mulai adalah PM, dan untuk menentukan mask format HH24 untuk output akhir.
SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time
FROM dual
TIME
---------
13:10
Catatan: 'AM'
dalam HH:MI hanyalah placeholder untuk indikator meridian AM/PM. Bisa juga 'PM'