2012-12-03 15 views
6

Mam to zapytanie, muszę wybrać wszystkie rekordy między dwiema datami, tabela mysql jest formatem datetime.Zaznacz wszystkie rekordy między dwoma datetime format

Próbowałem tego, ale to nie zadziałało.

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

Czy mógłbyś to sprecyzować? Jaki był komunikat o błędzie lub niepożądany wynik? –

Odpowiedz

11

Spróbuj to zamiast:

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

Dziękuję bardzo :) Jeszcze raz! –

+1

Uważaj, to zabije twoją wydajność na dużych stołach, ponieważ indeks nie będzie już działał. –

+0

Ta odpowiedź ignoruje indeksy i jest złą praktyką. Należy rozważyć użycie wartości pola bez zmian i przekształcić daty w formacie. Zamiast tego powinieneś użyć odpowiedzi @Rohita Suthara. –

-1

Powyższy będzie działać świetnie. Jeśli chcesz dodać dodatkowe warunki, normalne logiczna logika współpracuje z data/czas jak dobrze więc można zrobić coś takiego

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

tylko prosty przykład.

1

Spróbuj zapytanie - "ale to nie działa"

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

Ten naprawdę działa i jest dobrą praktyką, ponieważ konwertuje daty przy użyciu podanego formatu i używa indeksów. –

+1

, jeśli chcę dodać znacznik czasu i jak to zrobić. 'str_to_date ('2017-10-20 14:00:00', '% Y-% m-% d% H:% i:% s')' – virtualLast

Powiązane problemy