2012-02-08 2 views
2

У меня есть этот запрос:MySql SUBSTRING с несколькими условиями в ИНЕКЕ

SELECT DISTINCT phone, department 
FROM `users` 
WHERE ((SUBSTRING(phone,1,3) = '399') 
AND (SUBSTRING(phone,5,4) BETWEEN '3400' AND '3499') 
OR (SUBSTRING(phone,1,3) = '244') 
AND (SUBSTRING (phone,5,4) BETWEEN '5400' AND '5499')) 

, что дает мне эту ошибку:

#1630 - FUNCTION Database.SUBSTRING does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual

Запрос работает, если я использую только это:

SELECT DISTINCT phone, department 
FROM `users` 
WHERE (SUBSTRING(phone,1,3) = '399') 
AND (SUBSTRING(phone,5,4) BETWEEN '3400' AND '3499') 

ответ

8

В соответствии с MySQL Function Name Parsing не должно быть пробелов между встроенным именем функции («SUBSTRING» в вашем случае) и следующим »(« символ скобки ». Поведение парсера по умолчанию для определения того, являются ли имена встроенных . -в функция используется как вызовы функций или в качестве идентификаторов в контексте nonexpression

так что, если вы удалите пробел после вызова функции «SUBSTRING» в последней строке, ваш запрос будет работать нормально:

SELECT DISTINCT phone, department 
FROM `users` 
WHERE ((SUBSTRING(phone,1,3) = '399') 
AND (SUBSTRING(phone,5,4) BETWEEN '3400' AND '3499') 
OR (SUBSTRING(phone,1,3) = '244') 
AND (SUBSTRING(phone,5,4) BETWEEN '5400' AND '5499')) 
5

У вас не может быть пробела между SUBSTRING и (есть опция db что позволяет, если вы действительно этого хотите.

4

У вас есть дополнительное место в заключительном разделе:

AND (SUBSTRING (phone,5,4) BETWEEN '5400' AND '5499')) 
       ^---here 

удалите это, и весь запрос будет работать.

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