Bir Oracle tarih sütunundaki değerlere 30 dakika eklemem gerekiyor. Bunu SELECT ifademde şunları belirterek yapıyorum
to_char(date_and_time + (.000694 * 31)
bu da çoğu zaman iyi çalışır. Ancak saat AM/PM sınırında olduğunda çalışmaz. Örneğin, 12:30
a [PM olan] 30 dakika eklemek, AM olan 1:00
ı döndürür. Beklediğim cevap 13:00
. Bunu yapmanın doğru yolu nedir?
Bir tarihe gün sayısı ekleyebilmenin yanı sıra, Oracle 9i
veya sonraki bir sürümde olduğunuzu varsayarak, okunması biraz daha kolay olan aralık veri türlerini kullanabilirsiniz,
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
Alanın veri türü tarih veya zaman damgasıysa, gün sayısı olarak verilen doğru sayıyı (veya sizin durumunuzda bir günün doğru bir kesrini) eklerseniz Oracle her zaman doğru sonucu vermelidir. Yani değeri 30 dakika içinde çarpmaya çalışıyorsanız,:
select field + 0.5/24 from table;
Verdiğiniz bilgilere dayanarak, yapmaya çalıştığınız şeyin bu olduğuna inanıyorum ve işe yaradığından oldukça eminim.
Oracle'ın başlangıç saatinin PM olduğunu anladığından ve nihai çıktı için HH24 format maskesini belirttiğinden emin olun.
SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time
FROM dual
TIME
---------
13:10
Not: HH:MI'daki 'AM'
sadece AM/PM meridyen göstergesi için bir yer tutucudur. Ayrıca 'PM'
de olabilir