Вопрос:

SQL CURRENT_DATE не набирает ожидаемый результат

mysql phpmyadmin

25 просмотра

2 ответа

5 Репутация автора

Три ключевых бита деталей.

  1. Я делаю это напрямую через функцию SQL-запроса в phpMyAdmin

  2. Запускаемый запрос выглядит так:

    SELECT * FROM `leaderboard` 
    WHERE date > (CURRENT_DATE() - 30) 
    ORDER BY time DESC
    
  3. Мои данные таковы:

    id  room  team                    time  fte  date
    46  adod  Old But Amazing         372   0    2016-07-04 15:13:56
    40  adod  The Inappropriates      315   0    2016-08-22 15:11:58
    41  adod  Chelsea Hens            254   0    2016-08-22 15:12:13
    42  adod  Serco-Top Of The Board  221   0    2016-08-22 15:12:44
    43  adod  Gradually Escaping      165   0    2016-08-22 15:13:05
    44  adod  The Lamb Marlborough    105   0    2016-08-22 15:13:29
    45  adod  Failure                 0     1    2016-08-22 15:13:38
    

Это все данные в моей таблице, но также точный ответ, который я получаю, когда запускаю этот запрос. Что меня смущает, так это то, что текущая дата (2016-08-16), по крайней мере, на 40 дней позже 2016-07-04, так почему же ID 46 считается действительным результатом?

Обновление: также запрос

    SELECT * FROM `leaderboard` 
    WHERE date > (CURRENT_DATE() - 20) 
    ORDER BY time DESC

не вернет ID 46

Автор: Stu Источник Размещён: 22.08.2016 08:56

Ответы (2)


1 плюс

39554 Репутация автора

DATE является зарезервированным словом в MySQL, оно соответствует текущей дате.

Таким образом, ваше WHEREутверждение является постоянным, оно могло бы быть так же хорошо WHERE 5 > 1. Он всегда будет выбирать все строки.

Попробуйте другое имя для этого столбца.

Автор: Mike Nakis Размещён: 22.08.2016 09:02

3 плюса

146257 Репутация автора

Решение

Вместо:

(CURRENT_DATE() - 30)

Использование:

SUBDATE(CURRENT_DATE(), 30)

Это связано с тем, что первое выражение использует текущую дату в качестве числа в формате ГГГГММДД, то есть 20160822, а затем вычитает 30 из этого, давая 20160792, и, следовательно, неожиданные результаты.

Автор: trincot Размещён: 22.08.2016 09:11
Вопросы из категории :
32x32