2009-11-20 4 views
1

나는이 쿼리를 사용하는 경우 :일관성 MySQL의 DATEDIFF 행동

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

MySQL이 오류없이 쿼리를 실행하고 나는 지난 3 일 이내에 업데이트되지 않은 행의 수를 얻을 수 있습니다. 그러나, 나는 이런 식으로 쿼리를 변경하는 경우 : 나는 다음과 같은 오류가

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

을 :

#1305 - FUNCTION mydatabase.DATEDIFF does not exist 

이 왜 그런지 어떤 아이디어?

답변

2

LIMIT를 설정하지 않은 경우 SELECT에서 작동하지 않는 비슷한 문제가있었습니다. 그것은 MySQL의 업데이트에 수정되었다

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

:

는 그런 짓을하려고합니다. MySQL 버전도 업데이트하십시오.

+1

흥미롭게도, phpMyAdmin은 질의를 실행하기 전에 LIMIT 절을 추가하고 있는데 실패합니다. 필자가 제안한 것처럼 쿼리에 LIMIT를 직접 추가하면 쿼리가 올바르게 실행됩니다. phpMyAdmin 버전 2.6.4-pl3의 버그 여야합니다. 도와 주셔서 감사합니다. – Geoff

3

DATEDIFF과 괄호 ( 사이에 공백이 없어야합니다.

아마도 당신은 또한 SET sql_mode = "IGNORE_SPACE";

는 또한이 bugreport을 확인 시도 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 phpMyAdmin을 사용하여 쿼리를 입력 할 때 공간이 없다. 그러나 phpMyAdmin이 실행되기 전에 쿼리를 수정하고있을 수 있습니다. 실험으로 필자는 localhost에 phpMyAdmin (3.1.3.1)의 최신 버전을 사용해 보았습니다. 문제가있는 쿼리는 정상적으로 실행되었습니다. 서드 파티 (third-party)가 운영하는 프로덕션 서버에서 phpMyAdmin 버전은 2.6.4-pl3입니다. 프로덕션 서버에서 phpMyAdmin은 직접적인 mysql 쉘 액세스가 없기 때문에 임시 쿼리를 실행하는 유일한 방법입니다. – Geoff

+0

특정 phpMyAdmin이 쿼리 문자열을 변경하지 않고 sql_mode를''IGNORE_SPACE ''로 설정하여 공간을 추가하도록 만들 수 있습니다. Frankie와 bugreport의 사람들이 제안한 것처럼 이것이 도움이되지 않는다면 LIMIT를 추가하면 분명히 올바르게 구문 분석됩니다. –