【问题标题】:like clause doesn't work as it said in MySQL SQLlike 子句不像 MySQL SQL 中所说的那样起作用
【发布时间】:2014-08-26 03:07:28
【问题描述】:

我有一张桌子,比如 创建表 table1( 名称 varchar(32), );

里面有一些数据。当我这样选择时: select * from table1 where name like 'Jack2%';

会有 Jack2。

但如果我这样选择: select * from table1 where name like 'Jack[0-9]%'; 什么都没有;

我也试过用正则表达式代替like,但也没用!

怎么了?

【问题讨论】:

标签: mysql sql regex sql-like


【解决方案1】:

您混淆了两种不同的模式匹配机制。 SQL LIKE 使用% 匹配任何字符,_ 匹配任何单个字符;它没有像[0-9] 这样的东西来匹配一个数字。这看起来像是正则表达式中的字符类。

标准 SQL 根本不支持正则表达式,但 MySQL 支持 - 您只需要使用 RLIKE(或 REGEXP,但在 IMO 中读起来不太好)而不是 LIKE。但这意味着您也必须将 % 替换为等价的正则表达式 .*

SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';

【讨论】:

  • 是的,正如我所说的,你和 Frank Bonnet 是对的!
【解决方案2】:

Fiddle

MySQL REGEX

select * from Table1 where `name` REGEXP 'Jack[0-9]'

【讨论】:

  • 请注意,RLIKE 和 REGEXP 是同义词。
  • 好的,谢谢。真正的原因是 % 不代表正则表达式中的任何文本,但它确实如此。所以我们应该用 .* 代替 %
【解决方案3】:

您可以改用 RLIKE

SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';

请注意,'%' 运算符不适用于 RLIKE,您必须使用正则表达式模式,例如 '.*'。

【讨论】:

  • 请注意,RLIKEREGEXP 是同义词。
猜你喜欢
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2019-04-30
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多