2010-03-19 51 views
4

我必须创建一个SQL查询来获取以特定字符开头的所有行,除非传递给(PHP)函数的参数为​​0,那么它应该获得每个那行不是以A - Z开头(如#0-9。,$ etc)。MySQL:检查是否第一个字符是_not_ AZ

什么是最简单和最快的方式来获得这些行?

DB:MySQL 5.1中
柱:标题

回答

7
SELECT * 
FROM mytable 
WHERE title NOT RLIKE '^[A-Z]' 
3
SELECT * 
FROM myTable 
WHERE theColumn RLIKE '^[^A-Z]' 

说明
随着RLIKE谓词,一个括号图案表示括号内列出的任何一个字符(允许使用指示范围的短划线,如这里AZ是“A到Z”)。
注意两个^字符;他们有一个非常明显的含义:
第一个代表“字符串的开始”
其他字符^,中括号表示该模式应匹配是在括号内的列表其后列出的任何字符。
有关更多详细信息,请参阅mySQL documentation on pattern matching

的也可以被替换地表示为跟随

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

谨慎的字:独立于括号语法,以上二者中示出的图案使用“前端通配符”,它只能被处理通过表/索引扫描(或至少部分扫描),并且这对于更大的表格可能相对低效。

+1

在正则表达式中,'%'不是通配符 – Quassnoi 2010-03-19 14:15:47

+0

@Quassnoi:良好的捕获。我混合LIKE和RLIKE语法......现在全部修复。 – mjv 2010-03-19 14:41:04

相关问题