有一个名为 Students
的表。我想提取姓名以"n"或"p"或"y"开头的学生姓名。我知道在 TSQL(MS SQL 服务器(中,我可以按如下方式编写查询,它可以工作:
SELECT * FROM Students WHERE StudentName LIKE '[npy]%'
但是当我在MySQL(phpmyadmin(中执行相同的查询时,我无法检索正确的结果集。我尝试将学生姓名的字母转换为字符列表中提到的相同情况。我做了一些谷歌搜索,发现在MySQL中我们需要将其指定为正则表达式。我执行了以下查询并得到了预期的结果。
SELECT * FROM Students WHERE StudentName REGEXP '[[:<:]]n | [[:<:]]p | [[:<:]]y'
我想知道LIKE '[charlist]%'
语法不适用于MySQL的原因。是由于MySQL中的实现(MySQL不支持语法(还是我使用的phpmyadmin版本有问题?
非常感谢有关此的任何帮助。谢谢:)
一种更短的方法来编写查询:
SELECT * FROM Students WHERE StudentName REGEXP '^[npy]'
如果您担心区分大小写:
SELECT * FROM Students WHERE StudentName REGEXP BINARY '^[npy]'
在MySQL中,REGEXP
模式匹配在值中的任何位置成功,这与模式必须与整个值匹配LIKE
不同。
以下链接将为您提供更完整的答案:
MySQL 模式匹配
MySQL :不区分大小写:SELECT * FROM Students WHERE StudentName RLIKE '^[npy]' ;
区分大小写:SELECT * FROM Students WHERE StudentName CAST(RLIKE as BINARY) '^[npy]' ;