从数据库中选择以小写字母开头的所有字符串

时间:2016-06-16 20:39:39

标签: php mysql sql

我正在尝试选择数据库中所有字符串,这些字符串以带有regexp的小写字母开头,但由于某种原因,它选择了所有以大写字母开头的字符串。我做错了什么?

SELECT * 
FROM  `allData` 
WHERE response REGEXP  '^[a-z]'
LIMIT 0 , 30

4 个答案:

答案 0 :(得分:11)

来自MySQL REGEXP manual

  

REGEXP不区分大小写,除非与二进制字符串一起使用。

因此,可能在使用二进制字符串时会有一些运气:

WHERE response REGEXP BINARY '^[a-z]'

示范的合理愚蠢小提琴:http://sqlfiddle.com/#!9/7eade/3

编辑:正如Ray在评论中所说,您应该使用[[:lower:]]来代替所有排序规则,例如。

WHERE response REGEXP BINARY '^[[:lower:]]'

答案 1 :(得分:2)

我会使用mysql的Character Class Name与REGEXP BINARY匹配:

  WHERE response REGEXP BINARY  '^[[:lower:]]'

我不知道[a-z]在每个字符集和整理中是否有意义,因为字符类名[:lower:]将始终匹配所有小写字母字符。

答案 2 :(得分:1)

SELECT *
FROM allData
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1)
LIMIT 0 , 30

...但是,这可能会受到MySQL character collation

的限制

答案 3 :(得分:0)

select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''