提问人:Shaheer Jada 提问时间:4/21/2022 最后编辑:jmrkShaheer Jada 更新时间:4/26/2022 访问量:37
REGEXP 单词匹配
REGEXP word match
问:
我有一个脚本,我正在尝试将新的职位与数据库中的现有职位相匹配。
SELECT
a.title AS JobTitle,
j.Description AS MatchedJobTitle,
f.Description AS Family,
p.ShortDescription AS ColourComplexity,
j.IsCustomerFacing,
j.JobTitleID
FROM JobTitle j
CROSS JOIN Staging.TMP_OC1 a
INNER JOIN JobFamily f ON j.JobFamilyId = f.JobFamilyID
INNER JOIN Pathways p ON f.PathwaysID = p.PathwaysID
WHERE a.title REGEXP CONCAT('([[:<:]]|^)', j.Description, '[s]?([[:>:]]|$)');
暂存 .TMP_OC1 表有一条记录,即新的职位名称,在本例中为 Software Developer,USA。 我想将它与dbs现有的职位相匹配,即“软件开发人员”。 上面的正则表达式代码适用于某些职位,但不适用于其他职位。 请协助制定一个更全面的。
我正在使用 mysql V8。
答:
0赞
Rick James
4/26/2022
#1
您无需测试字符串的开头/结尾;这些是“词语界限”。
MySQL 8.0 同时使用两个字边界,而不是 和
\b
[[:<:]]
[[:>:]]
在某些情况下,8.0 需要将反斜杠加倍。
这可能有效:
REGEXP CONCAT('\\b', j.Description, 's?\\b')
上一个:循环查询,直到找到结果
评论
works for some job titles but not others
:请提供一个数据集和一些示例,哪些可以工作,哪些地方无效。这将有助于人们了解问题的真正含义。[[:<:]]
是 Spencer 库支持的旧式词边界。从版本 8.0.4 开始,MySQL 使用不支持它的 ICU 库。请参阅正则表达式兼容性注意事项。所以使用 std。 相反。\b