2011-04-04 16 views
7

Oracle veritabanında yeniyim. Oracle'da tarih-zaman kavramları hakkında çok fazla bilgim yok. Karşı karşıya olduğum sorun, belirli bir tarihte girilen kayıtları almaktır.Ama veritabanında SQL sorgusu yürütürken, sıfır kayıt döndürür.Oracle'da tarih alanından yalnızca tarih değeri nasıl alınır?

Veritabanı, datetime değeriyle birlikte kayıt içeren bir tarih alanına sahiptir.

SQL sorgusu: SELECT * FROM table WHERE table.daterecord = to_date(03-Mar-2010)

Herhangi bir kayıt döndürüyor değil ama

SELECT * FROM table WHERE table.daterecord > to_date(04-Mar-2010) 

benim sorguyu değiştirmek eğer bazı kayıtları dönecektir. Yukarıdaki fark, zaman nedeniyle. Bugünden itibaren zaman değerini alabilirim. Bunun için trunc işlevini kullanabilir miyim? Değerli önerileriniz için şimdiden teşekkür ederiz.

cevap

4

sen Örneğin TRUNC

kullanabilirsiniz:

SELECT * 
    FROM table 
WHERE TRUNC(table.daterecord) = TO_DATE('03-Mar-2010', 'DD-MON-RRRR') 
15

Evet TRUNC işlevini kullanabilirsiniz.

SELECT * 
    FROM table 
WHERE TRUNC(table.daterecord) = TO_DATE('03-Mar-2010', 'DD-MON-RRRR') 
7

"How to correctly handle dates in queries constraints" ile ilgili önerileriniz için bu SO'ya bakın.

SELECT * 
    FROM table 
WHERE table.daterecord >= TO_DATE('03-Mar-2010', 'DD-MON-RRRR') 
    AND table.daterecord < TO_DATE('04-Mar-2010', 'DD-MON-RRRR') 
+0

+1, nedeniyle (trunc vs) – tbone

+0

+1 endeksi kullanma yeteneği bu gibi:

zaten sağlanan cevaplara ek olarak, bu daha kolay dizinlenebilir olduğundan aralığını kullanarak öneririm Diğer sorudaki cevabınız için :) – Ronnis

+0

Bunun bir yinelenen soru olduğunu bildiğinizden, cevabınızı çoğaltmak yerine soruyu kapatmak için oy vermiş olmanız gerekir. Bu noktalara gerçekten ihtiyacın yok gibi değil. – APC

İlgili konular