adi*_*dit 6 regex mysql sql select sql-like
我有以下查询:
SELECT *
FROM `shop`
WHERE `name` LIKE '%[0-9]+ store%'
Run Code Online (Sandbox Code Playgroud)
我想匹配说 的字符串'129387 store',但上面的正则表达式不起作用。这是为什么?
如果你指的是MySQL,LIKE它不实现正则表达式。它实现了更受限制的 SQL 模式匹配,它只有两个特殊运算符:%匹配任何字符序列,并_匹配任何单个字符。
如果要正则表达式匹配,则必须使用REGEXPorRLIKE运算符:
SELECT *
FROM shop
WHERE name REGEXP '[0-9]+ store'
Run Code Online (Sandbox Code Playgroud)
MySQL 的正则表达式语言不包含\d指定数字,但您可以将其写为:
SELECT *
FROM shop
WHERE name REGEXP '[[:digit:]]+ store'
Run Code Online (Sandbox Code Playgroud)
如果商店名称必须以数字开头,则需要一个锚点:
SELECT *
FROM shop
WHERE name REGEXP '^[0-9]+ store'
Run Code Online (Sandbox Code Playgroud)
您可以在regular-expressions.info中了解有关正则表达式语法的更多信息。
使用REGEXP运算符而不是LIKE运算符
尝试这个:
SELECT '129387 store' REGEXP '^[0-9]* store$';
SELECT * FROM shop WHERE `name` REGEXP '^[0-9]+ store$';
Run Code Online (Sandbox Code Playgroud)
输出
| NAME |
|--------------|
| 129387 store |
Run Code Online (Sandbox Code Playgroud)