Porównaj daty w MySQL

95

Chcę porównać datę z bazy danych, która jest między dwoma podanymi datami. Kolumna z bazy danych to DATETIME i chcę porównać ją tylko z formatem daty, a nie z formatem daty i godziny.

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10'

Otrzymuję ten błąd, gdy wykonuję powyższy kod SQL:

Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'at linia 1

Jak można rozwiązać ten problem?

NVG
źródło

Odpowiedzi:

95

Możesz spróbować poniżej zapytania,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
źródło
39
Dla osób pochodzących z google: wpisz datę w mysql w formacie rrrr-mm-dd.
Błażej Michalik
89

To jest składnia SQL Server do konwersji daty na ciąg. W MySQL możesz użyć funkcji DATE, aby wyodrębnić datę z daty i godziny:

SELECT *
FROM players
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10'

Ale jeśli chcesz skorzystać z indeksu w kolumnie, us_reg_datemożesz zamiast tego spróbować tego:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
źródło
1
Dziękujemy za rozważenie możliwości skorzystania z indeksu. Myślę, że zapytanie nie powinno zawierać klauzuli „+ interwał 1 dzień”.
Jurgenfd
10

To działa dla mnie:

select date_format(date(starttime),'%Y-%m-%d') from data
where date(starttime) >= date '2012-11-02';

Zwróć uwagę na ciąg formatu „% Y-% m-% d” i format daty wejściowej.

Rahatur
źródło
6

Mam odpowiedź.

Oto kod:

SELECT * FROM table
WHERE STR_TO_DATE(column, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y')
Gurjeet Singh
źródło
2

tak to zadziałało dla mnie:

select * from table
where column
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
 AND STR_TO_DATE('07/10/15', '%d/%m/%Y')

Proszę zauważyć, że musiałem zmienić STR_TO_DATE (kolumna, '% d /% m /% Y') z poprzednich rozwiązań, ponieważ ładowanie trwało wieki

Iria
źródło