en biraz bu yıkmak edelim: Ben belki düşünüyorum TRUNC(TO_DATE('2012-12-01 20:10:10', 'HH'))
: Bunu söylediğini sanmıyorum, İlk olarak
WHERE (ResTRRequest.RequestTime
BETWEEN TO_CHAR(TRUNC(TO_DATE('2012-12-01 20:10:10', 'HH')), 'YYYY-MM-DD HH24:MI:SS')
AND TO_CHAR(TRUNC(CURRENT_TIMESTAMP, 'HH') + INTERVAL '59:59' MINUTE TO SECOND, 'YYYY-MM-DD HH24:MI:SS'))
Bu şu anlama gelir: TRUNC(TO_DATE('2012-12-01 20:10:10'), 'HH')
. 1-12 hatası arasındaki sayı, 20
saatinizin olması ve HH
maskesini kullanarak bir tarihe dönüştürmeye çalıştığınız gerçeğinden kaynaklanır. Ama dediğim gibi bu bir yazım hatası.
TRUNC(TIMESTAMP'2012-12-01 20:10:10', 'HH')
İkinci ve sadece, sen dizeleri olarak tarih ve zaman damgalarını depoladığınız yoldan bu olsun: Ayrıca TO_DATE()
yerine burada bir TIMESTAMP
değişmez kullanabilir? Bu iyi bir fikir değil.
Üçüncü olarak, kenar durumlarını gözden kaçırabileceğiniz için BETWEEN
tarih karşılaştırmalarını kullanmak iyi bir fikir değildir. O şöyle bu yeniden yazmak daha iyi olabilir:
WHERE (ResTRRequest.RequestTime >= TO_CHAR(TRUNC(TO_DATE('2012-12-01 20:10:10'), 'HH'), 'YYYY-MM-DD HH24:MI:SS')
AND ResTRRequest.RequestTime < TO_CHAR(TRUNC(CURRENT_TIMESTAMP, 'HH') + INTERVAL '1' HOUR, 'YYYY-MM-DD HH24:MI:SS'))
Teşekkürler David ... Şimdi iyi çalışıyor. – Yogesh