我必须创建一个SQL查询来获取以特定字符开头的所有行,除非传递给(PHP)函数的参数为0,在这种情况下它应该得到每个不以A - Z开头的行(如# 0-9.,$ etc).
获取这些行的最简单,最快捷的方法是什么?
DB:MySQL 5.1
专栏:标题
SELECT *
FROM myTable
WHERE theColumn RLIKE '^[^A-Z]'
Run Code Online (Sandbox Code Playgroud)
解释:
对于 RLIKE 谓词,括号模式代表括号内列出的任何一个字符(允许使用破折号来表示范围,如这里,AZ 是“A 到 Z”)。
注意两个 ^ 字符;它们有一个非常不同的含义:
第一个代表“字符串的开头”
另一个 ^ 字符,在方括号内表示该模式应该匹配任何未在方括号列表中列出的字符。
有关更多详细信息,请参阅有关模式匹配的mySQL 文档。
也可以写成如下
...
WHERE theColumn NOT RLIKE '^[A-Z]'
Run Code Online (Sandbox Code Playgroud)
一个警告:独立于括号语法,上面显示的模式都使用“前端通配符”,只能通过表/索引扫描(或至少部分扫描)来处理,这可以是对于较大的表,效率相对较低。