在WHERE子句中具有多个条件的mySQL SUBSTRING

tre*_*ker 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'))
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

#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')
Run Code Online (Sandbox Code Playgroud)

Kor*_*urk 8

根据MySQL 函数名称解析,内置函数名称(在您的情况下为"SUBSTRING")和下面的"("括号字符)之间不能有空格.这是一种默认的解析器行为,用于区分内置函数的名称函数被用作函数调用或非映射上下文中的标识符.

因此,如果您在最后一行的'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'))
Run Code Online (Sandbox Code Playgroud)


Eri*_*man 5

SUBSTRING和(.)之间没有空格.如果你真的想要,有一个db选项允许它.