Używam pomiędzy, aby uzyskać cały rekord z tabeli między dwoma datami, to działa dobrze, jeśli oba daty są od tego samego miesiąca, ale jeśli zmienią się miesiące, to nie wykazują żadnych wierszy

SELECT * from user_details WHERE currentdate BETWEEN '14/05/2018' AND '20/05/2018'

Przyniesie cały wiersz między tymi datami, ale jeśli zmieniam miesiąc, nie pokazuje żadnego rekordu

SELECT * from user_details WHERE currentdate BETWEEN '30/05/2018' AND '20/06/2018'
sql
-1
Anuj Kumar 4 czerwiec 2018, 16:02

4 odpowiedzi

Najlepsza odpowiedź

Nie używasz aktualnego formatu daty, musisz zdefiniować format daty kolumn

SELECT * from user_details WHERE str_to_date(currentdate, '%d/%m/%Y') BETWEEN '30/05/2018' AND '20/06/2018'
0
Bhavesh Taneja 4 czerwiec 2018, 13:10

Może daty są przechowywane jako text? Jeśli tak, obejście czasowe jest odrzucenie do typu danych DATE.

SELECT * 
from user_details
WHERE CAST(currentdate AS DATE) BETWEEN CAST('30/05/2018' AS DATE)
                                    AND CAST('20/06/2018' AS DATE)
1
Lukasz Szozda 4 czerwiec 2018, 13:06

Używasz datów jako ciągów. Musisz go przekonwertować na przykład

SET @date := 'Jul.20 2018';

SELECT STR_TO_DATE(@date,'%M.%d %Y');
0
Bonzay 4 czerwiec 2018, 13:06

Użyj standardowych formatów daty:

SELECT * 
FROM user_details
WHERE currentdate >= '2018-05-14' AND
      currentdate < '2018-05-20';

Zauważ, że również przełączyłem się z używania BETWEEN. to naprawdę dobry wpis na blogu Aaron Bertrand wyjaśniający dlaczego. Zauważ, że mówi specjalnie o SQL Server, ale większość dyskusji dotyczy dowolnej bazy danych.

0
Gordon Linoff 4 czerwiec 2018, 13:09