MySQL:检查第一个字符是否_not_ A-Z

时间:2010-03-19 13:21:00

标签: mysql

我必须创建一个SQL查询来获取以特定字符开头的所有行,除非传递给(PHP)函数的参数是0,在这种情况下它应该得到每行以A - Z开头(如#0-9。,$ etc)。

获取这些行的最简单,最快捷的方法是什么?

DB:MySQL 5.1
专栏:标题

2 个答案:

答案 0 :(得分:7)

SELECT  *
FROM    mytable
WHERE   title NOT RLIKE '^[A-Z]'

答案 1 :(得分:3)

SELECT *
FROM myTable
WHERE theColumn RLIKE '^[^A-Z]'

<强>解释
使用RLIKE谓词时,括号内的模式代表括号内列出的任何一个字符(允许使用短划线表示范围,因为这里A-Z是“A到Z”)。
注意两个^字符;它们有非常明显的含义:
第一个代表“字符串的开头”
括号内的另一个^字符表示该模式应与括号列表中此后列出的的任何字符匹配。
有关详细信息,请参阅mySQL documentation on pattern matching

也可以写成如下

...
WHERE theColumn NOT RLIKE '^[A-Z]'

提醒:独立于括号内的语法,上面显示的模式都使用“前端通配符”,只能通过表/索引扫描进行处理(或至少部分扫描),对于较大的表,这可能效率相对较低。