我对这个通配符查找有问题,不确定为什么不这样做:
我在找42号销售代理的例子。你可以想象,作为销售人员,他们并不真正关心垃圾输入=垃圾输出。所以他们的代理代码通常都很混乱。
代理42的有效示例:
42个
30-42-22-假期
42复活节
42优惠券
42优惠券-423355
29-42销售-52
显式需要不显示的无效示例
A4290042号
4297901个
42cmowc29d型
O203F9J42PO0号
以下是我想到的最成功的模式:

SELECT company_id, agent
FROM cust_data
WHERE (agent = ('42') OR agent LIKE ('42%-%') OR agent LIKE ('%-%42') OR agent LIKE ('%-%42%-%') OR agent LIKE ('42[a-z]%-%') OR agent LIKE ('%-%42[a-z]%') OR agent LIKE ('%-%42[a-z]%-%') OR agent LIKE ('42[a-z]%'))

我得到了大部分有效的和没有无效的,但我仍然不能抓住像42Easter或29-42Sale-52这样的例子,即使我告诉它抓住这种风格…
有什么建议吗?

最佳答案

如果需要匹配未被数字包围的42,则可以使用带锚(^表示字符串的开头,$表示字符串的结尾)和反字符类的替换:

WHERE agent ~ '(^|[^0-9])42($|[^0-9])'

the regex demo
说明:
(^|[^0-9])-字符串的开头^或非数字[^0-9]
42-文字42
($|[^0-9])-字符串结尾$或非数字[^0-9]

关于sql - 正则表达式帮助进行通配符查找,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36291861/

10-12 03:09