【发布时间】:2019-01-21 11:45:58
【问题描述】:
对于我的数据库,我有一个公司编号列表,其中一些以两个字母开头。我创建了一个正则表达式,它应该从查询中消除这些,并且根据我的测试,它应该。但是在执行时,结果仍然包含带字母的数字。
这是我在 https://www.regexpal.com 上测试过的正则表达式
([^A-Z+|a-z+].*)
我已经针对 SC08093、ZC000191 和 NI232312 等众多变体对其进行了测试,这些变体在测试中不应该匹配且不匹配,这很好。
我的 sql 查询看起来像;
SELECT companyNumber FROM company_data
WHERE companyNumber ~ '([^A-Z+|a-z+].*)' order by companyNumber desc
总结一下,像 SC08093 这样的字符串不应该匹配,因为它们以字母开头。
我已经阅读了 postgres 的文档,但我似乎找不到任何关于此的内容。我不确定我在这里缺少什么。谢谢。
【问题讨论】:
-
试试
WHERE companyNumber NOT SIMILAR TO '[A-Za-z]{2}%' -
谢谢你,成功了。如果可以的话,您能否解释一下为什么这行得通而我的正则表达式却行不通?
-
您的正则表达式可能没有达到您的预期 -
[^A-Z+|a-z+]将匹配一个 single 字符,该字符既不是小写字母,也不是大写字母,也不是文字+也不是文字“|” .
标签: sql regex postgresql