2012-12-03 23 views
6

Bu sorguyu kullanıyorum, iki tarih arasındaki tüm kayıtları seçmem gerekiyor, mysql tablosu bir datetime biçimidir.İki adet datetime biçimi arasındaki tüm kayıtları seçin

Bunu denedim ama işe yaramadı.

select * from cdr 
WHERE calldate BETWEEN '2012-12-01' AND '2012-12-03'; 
+0

Daha spesifik olabilir misin? Hata mesajı veya istenmeyen sonuç neydi? –

cevap

11

yerine bu deneyin:

select * from cdr 
WHERE DATE(calldate) BETWEEN '20121201' AND '20121203'; 
+0

Çok teşekkürler :) Tekrar! –

+1

Dikkat edin, bu, indeks artık çalışmayacağından, büyük masalardaki performansınızı azaltacaktır. –

+0

Bu cevap, dizinleri yok sayar ve kötü bir uygulamadır. Alan değerini olduğu gibi kullanıp tarihlerinizi bir biçim kullanarak dönüştürmeniz gerekir. Bunun yerine @Rohit Suthar 'ın cevabını kullanmalısınız. –

-1

yukarıdaki büyük çalışacaktır. Fazladan koşulları eklemek istedim Eğer

... 
where DATE(calldate) < '20121201' AND DATE(calldate) >= '20121203' OR DATE(calldate) = '20121205' 

Sadece basit örnek gibi bir şeyler yapabileceğini böylece normal Boole mantığı yanı tarih/saat ile çalışır.

1

bu sorguyu deneyin - "ama işe yaramadı"

SELECT * FROM cdr WHERE calldate BETWEEN str_to_date('2012-12-01','%Y-%m-%d') AND str_to_date('2012-12-03','%Y-%m-%d'); 
+0

Bu aslında çalışır ve verilen biçim ve kullanım indeksleri kullanarak tarihleri ​​dönüştürecek çünkü iyi bir uygulamadır. –

+1

Eğer bir zaman damgası eklemek istedim de bunu nasıl yaparım. 'str_to_date ('2017-10-20 14:00:00', '% Y-% m-% d% H:% i:% s')' – virtualLast

İlgili konular