Sen months_between
fonksiyonunu deneyebilirsiniz. Ondalık sayı olarak iki tarih arasındaki ay sayısını hesaplar. Bu elde etmek için ~ 0.48 (2010-09-01 yaklaşık saat 11:30 'da yürütülen) ikinci hat geri 1. dönecektir Bu örnekte
select months_between(sysdate+30, sysdate) from dual;
select months_between(sysdate+15, sysdate) from dual;
birinci paramatresi saniyeden daha fazladır gerçek tarih değerlerini: genel olarak
select case when months_between(sysdate+30, sysdate) > 0 then sysdate+30 else sysdate end from dual;
:
case when months_between(dateA, dateB) > 0 then dateA else dateB
Güncelleme:
Bazı deneylerden sonra, bu işlevin en iyi tanecikleri Gün'dür. 0.032258064516129 dönecektir 0
ama
select months_between(to_date('2010-10-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),
to_date('2010-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
from dual;
select months_between(to_date('2010-10-16 23:59:59', 'YYYY-MM-DD HH24:MI:SS'),
to_date('2010-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
from dual;
... dönecektir.
diğer bazı ilginç tarih farkı
/burada tekniklerini karşılaştırmak:
http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns
Ben açıkça size DECODE istediğini söyledi şimdi görüyoruz. Bir boole durumunun değerlendirildiği bir soruyu CASE kullanırım. Ne olursa olsun, maksimum hassasiyetle karşılaştırmayı istemediğiniz sürece, tarihleri karşılaştırırken dakikayı kesmeyi unutmayın. – orbfish
Mükemmel bir nokta, ben çok sık tarihlerle çalıştığım için bunu açıkladım ama başkalarının buna bakıp bakmadığını söylemek güzel bir şey. – Freddy