mysql - 在 MySQL 中搜索“全词匹配”
问题描述
我想在 mysql 中使用 select 查询来搜索确切的单词
eg:我的表格列内容
"This is a sample mail to test Auto Decline Invitation."
问:
SELECT * FROM `test` where text REGEXP '[[:<:]]Invitation.[[:>:]]'
在上面的示例中,我需要选择与“邀请”匹配的所有记录。
解决方案
除了使用REGEXP
,您还可以使用LIKE
模式匹配运算符。
示例查询可能是:
SELECT * FROM `test` WHERE `text` LIKE '%Invitation.%';
编辑
否则,如果LIKE
不符合您的要求,您当然可以使用REGEXP
.
对于REGEXP
(MySQL 5.7)表达式,您需要使用(由Wiktor提到):
SELECT * FROM `test` WHERE `text` REGEXP '[[:<:]]Invitation[.]';
对于REGEXP
(MySQL 8.0)表达式,您需要使用:
SELECT * FROM `test` WHERE `text` REGEXP '\\bInvitation\\.';
[[:<:]]
&[[:>:]]
和\b
运算符为其边界提供了类似的功能。MySQL 5.7 更明确一点,您可以在页面底部的文档中看到。在 MySQL 8.0 中,它支持 Unicode 国际组件 (ICU),而 5.7 则使用 Henry Spencer 的正则表达式实现。
来自MySQL 8.0 文档:
MySQL 使用 Unicode 国际组件 (ICU) 实现正则表达式支持,它提供完整的 Unicode 支持并且是多字节安全的。(在 MySQL 8.0.4 之前,MySQL 使用 Henry Spencer 的正则表达式实现,它以字节方式运行并且不是多字节安全的。
如果您在此文档页面上搜索\b
,您会看到 ICU 与 Spencer 正则表达式处理的区别之间的一些澄清:
Spencer 库支持词首和词尾边界标记(
[[:<:]]
和[[:>:]]
符号)。ICU没有。对于ICU,可以使用\b
匹配词边界;双反斜杠,因为 MySQL 将其解释为字符串中的转义字符。
对我来说也有一点学习经验,谢谢 Wiktor!
推荐阅读
- vue.js - 如何使 .vue 文件在 VS2019 Net Code 3.1 中工作
- bigcommerce - 如何使 BigCommerce 小部件与 PageBuilder 兼容
- azerothcore - 艾泽拉斯世界服务器无法启动win10
- django - 在 Django 项目中将网站图标放在哪里?
- reactjs - React.Lazy(() => import 在 Firefox 上不起作用,使用 HTTPS
- xml - 将xml数据转换成csv格式
- angularjs - 用于验证字符串的 ngPattern
- qt - 为什么我的 QML 代码从 Qt.labs 加载 FileDialog,尽管我导入了 QtQuick.Dialogs?
- identityserver4 - Web 应用程序中的 IdentityServer4 登录名和用户
- javascript - AJAX jQuery。从 SharePoint 列表中提取日期和时间字段。为什么它以时髦的格式显示?