gpt4 book ai didi

sql - 测试正常时正则表达式无法正常工作

转载 作者:行者123 更新时间:2023-11-29 12:29:07 26 4
gpt4 key购买 nike

对于我的数据库,我有一个公司编号列表,其中一些以两个字母开头。我创建了一个正则表达式,它应该从查询中消除这些,根据我的测试,它应该。但是执行时,结果仍然包含带字母的数字。

这是我在 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 的文档,但似乎找不到任何与此相关的内容。我不确定我在这里错过了什么。谢谢。

最佳答案

~ '([^A-Z+|a-z+].*)' 不起作用,因为这是一个 [^A-Z+|a-z+].* 即使在部分 匹配时也返回 true 的正则表达式匹配操作(正则表达式匹配操作不需要完整的字符串匹配,因此模式可以匹配字符串中的任何位置)。 [^A-Z+|a-z+].* 匹配从 AZ, +, 的字母| 或从 az` 的字母,然后是字符串中任意位置的任意数量的任意零个或多个字符。

你可以使用

WHERE companyNumber NOT SIMILAR TO '[A-Za-z]{2}%'

参见 online demo

此处,NOT SIMILAR TO 返回 SIMILAR TO 的逆结果手术。此 SIMILAR TO 运算符接受几乎是正则表达式模式但也类似于常规通配符模式的模式。 NOT SIMILAR TO '[A-Za-z]{2}%' 表示所有以两个 ASCII 字母开头的记录([A-Za-z]{2} ) 和 (%) 之后的任何内容都不会被返回,所有其他的都将被返回。请注意,SIMILAR TO 需要完整的字符串匹配,与 LIKE 相同。

关于sql - 测试正常时正则表达式无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com