我有以下查询:
SELECT *
FROM `shop`
WHERE `name` LIKE '%[0-9]+ store%'
我想匹配'129387 store'
的字符串,但上面的正则表达式不起作用。那是为什么?
答案 0 :(得分:3)
如果您的意思是MySQL,LIKE
不实现正则表达式。它实现了更受限制的SQL模式匹配,它只有两个特殊的运算符:%
匹配任何字符序列,_
匹配任何单个字符。
如果您想要正则表达式匹配,则必须使用REGEXP
或RLIKE
运算符:
SELECT *
FROM shop
WHERE name REGEXP '[0-9]+ store'
MySQL的正则表达式语言不包括\d
来指定数字,但您可以将其写为:
SELECT *
FROM shop
WHERE name REGEXP '[[:digit:]]+ store'
如果商店名称必须以数字开头,则需要一个锚点:
SELECT *
FROM shop
WHERE name REGEXP '^[0-9]+ store'
您可以在regular-expressions.info了解有关正则表达式语法的更多信息。
答案 1 :(得分:3)
使用REGEXP运算符代替 LIKE 运算符
试试这个:
SELECT '129387 store' REGEXP '^[0-9]* store$';
SELECT * FROM shop WHERE `name` REGEXP '^[0-9]+ store$';
<强>输出强>
| NAME |
|--------------|
| 129387 store |
答案 2 :(得分:0)
尝试
SELECT *
FROM `shop`
WHERE `name` LIKE '%[0-9] store%'