【问题标题】:LIKE '[charlist]%' syntax not working in MySQL (phpMyAdmin)LIKE '[charlist]%' 语法在 MySQL (phpMyAdmin) 中不起作用
【发布时间】: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


【解决方案1】:

还有一种更短的方式来编写您的查询:

SELECT * FROM Students WHERE StudentName REGEXP '^[npy]'

如果您担心区分大小写:

SELECT * FROM Students WHERE StudentName REGEXP BINARY '^[npy]'

在 MySQL 中,REGEXP 模式匹配在值的任何位置都成功,这与模式必须匹配整个值的LIKE 不同。

下面的链接会给你一个更完整的答案:

MySQL Pattern Matching

【讨论】:

    【解决方案2】:

    MySQL: 不区分大小写:SELECT * FROM Students WHERE StudentName RLIKE '^[npy]' ; 区分大小写:SELECT * FROM Students WHERE StudentName CAST(RLIKE as BINARY) '^[npy]' ;

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 1970-01-01
      • 2013-02-26
      • 2014-06-29
      • 1970-01-01
      • 2016-01-29
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多