2009-11-20 2 views
1

Когда я использую этот запрос:Противоречивого MySQL DATEDIFF поведение

SELECT COUNT(*) FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 

MySQL выполняет запрос без каких-либо ошибок, и я получаю количество строк, которые не были обновлены в течение последних 2-х дней. Однако, если я изменить запрос так:

SELECT * FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 

Я получаю следующее сообщение об ошибке:

#1305 - FUNCTION mydatabase.DATEDIFF does not exist 

Любые идеи, почему это так?

ответ

2

У меня была аналогичная проблема, когда он не работал бы на SELECT, если бы я не установил LIMIT.

Попробуйте сделать что-то вроде:

SELECT * FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 LIMIT 0, 10 

Он получил скорректированный на обновлении MySQL. Попробуйте также обновить версию MySQL.

+1

Интересно, что phpMyAdmin добавлял предложение LIMIT перед выполнением запроса, что терпит неудачу. Если я добавлю LIMIT к запросу, то, как вы предлагаете, запрос выполняется отлично. Должна быть ошибка в phpMyAdmin версии 2.6.4-pl3. Спасибо за помощь. – Geoff

3

Проверьте, что у вас нет места между DATEDIFF и кронштейном (.

Возможно, вы могли бы также попробовать SET sql_mode = "IGNORE_SPACE";

Также проверьте этот bugreport.

+0

Спасибо за ответ. У меня определенно нет места, когда я ввожу запрос, используя phpMyAdmin. Однако может быть, что phpMyAdmin модифицирует запрос до его выполнения. В качестве эксперимента я попробовал новую версию phpMyAdmin (3.1.3.1) на моем локальном хосте, который отлично выполнил запрос проблемы. На моем рабочем сервере (который размещен сторонним) версия phpMyAdmin составляет 2.6.4-pl3. На моем рабочем сервере phpMyAdmin - единственное средство, которое я выполняю для специального запроса, поскольку у меня нет прямого доступа к оболочке mysql. – Geoff

+0

Ну, вы можете сделать определенный phpMyAdmin не изменением строки запроса и добавлением пробела, установив sql_mode в '' IGNORE_SPACE''. Если это не поможет, как предложили Фрэнки и люди в bugreport, добавление LIMIT, по-видимому, делает его правильным. –

Смежные вопросы