Порівняйте дати в MySQL


94

Я хочу порівняти дату з бази даних, яка знаходиться між 2 заданими датами. Стовпець із бази даних - 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

Як можна вирішити цю проблему?

Відповіді:


95

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

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)

38
Для людей, які приходять із google: тип дати в mysql поставляється у форматі рррр-мм-дд.
Błażej Michalik

88

Це синтаксис SQL Server для перетворення дати в рядок. У MySQL ви можете використовувати функцію DATE для вилучення дати з дати та часу:

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') з попередніх рішень, оскільки для завантаження потрібно вік

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.