【发布时间】:2014-10-09 18:15:45
【问题描述】:
有一个名为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 版本有问题?
非常感谢您对此提供的任何帮助。谢谢:)
【问题讨论】:
-
LIKE '[charlist]%'与查找以[charlist]开头的字符串相同。对于您的问题,您必须为每个字符重复LIKE语句。 -
LIKE(在 MySQL 中)不使用正则表达式。它有通配符。%表示“0 个或多个字符”,_表示“一个字符。如果要使用正则表达式,则需要使用REGEXP(或RLIKE)。试试StudentName REGEXP '^[npy].*'。 -
MySQL 在 LIKE 中没有那种通配符语法,据我所知只有 SQL Server 和 Sybase/SQL Anywhere 有。
-
是的。我认为我的查询可以用更简单的方式编写。非常感谢 Ismael、Rocket 和 Joachim 的帮助。
标签: mysql sql regex where-clause