Сравнить даты в MySQL

95

Я хочу сравнить дату из базы данных, которая находится между двумя заданными датами. Столбец из базы данных - это DATETIME, и я хочу сравнить его только с форматом даты, а не с форматом datetime.

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'

Я получаю эту ошибку, когда выполняю приведенный выше SQL:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'us_reg_date, 120)> =' 2000-07-05 'И ПРЕОБРАЗОВАТЬ (CHAR (10), us_reg_date, 120) <=' 2011- 'в строка 1

Как решить эту проблему?

NVG
источник

Ответы:

95

Вы можете попробовать запрос ниже,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Ник
источник
39
Для людей, пришедших из Google: тип даты в mysql имеет формат гггг-мм-дд.
Błażej Michalik
89

Это синтаксис SQL Server для преобразования даты в строку. В MySQL вы можете использовать функцию DATE для извлечения даты из datetime:

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

Но если вы хотите воспользоваться индексом столбца, us_reg_dateвы можете попробовать это вместо этого:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Марк Байерс
источник
1
Я признателен за то, что вы решили воспользоваться указателем. Я думаю, что в запросе не должно быть предложения «+ интервал 1 день».
Jurgenfd
10

Это работает для меня:

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

Обратите внимание на строку формата "% Y-% m-% d" и формат даты ввода.

Рахатур
источник
6

Я получил ответ.

Вот код:

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')
Гурджит Сингх
источник
2

вот что у меня сработало:

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')

Обратите внимание, что мне пришлось изменить STR_TO_DATE (столбец, '% d /% m /% Y') из предыдущих решений, так как загрузка занимала много времени

Ирия
источник