regex - Postgres SQL WHERE 子句在模式匹配中包含 'OR'

标签 regex postgresql

我的字段中有 010xxx、011xxx、110xxx、111xxx、Q10xxx、Q11xxx 字符串以及其他不相似的值。它们可能是XyzABC

我有两个正则表达式模式,分别给出了良好的结果:[1Q]_[0-9]%0_[1-9]%

换言之,如果返回 true

first letter is 1 or Q and the 3rd letter is a 0-9 

OR 

the first letter is 0 and the third letter is 1-9

如何创建使用 SIMILAR TO 或正则表达式执行 OR 操作的搜索模式?

一个可以单独工作的版本是:

SELECT field FROM db WHERE field SIMILAR TO '[1Q]_[0-9]%'

不依赖 SIMILAR 或正则表达式。它们正是我可以使用的,直到我尝试它们。接受其他建议。

最佳答案

您可以使用 SIMILAR TO 图案如

WHERE field SIMILAR TO '([1Q]_[0-9]|0_[1-9])%'

SIMILAR TO 模式需要完整的字符串匹配,因此该模式的含义是:以 1 开头或Q ,然后是任何字符,然后是任何数字,或者以 0 开头、任意字符和非零数字,后面可以有任意 0 个或多个字符。

您还可以使用正则表达式,例如

WHERE field ~ '^(?:[1Q].[0-9]|0.[1-9])'

请参阅regex demo

详细信息:

  • ^ - 字符串开头
  • (?: - 非捕获组的开始:
    • [1Q].[0-9] -1Q 、任意字符和数字
  • | - 或者
    • 0.[1-9] -0 、任何字符和非零数字
  • ) - 非捕获组的结束。

关于regex - Postgres SQL WHERE 子句在模式匹配中包含 'OR',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64747750/

相关文章:

python - 如何使用 Python 和 Pandas 查找具有单个字符的句子

sql - 一个命令的交易

xml - Postgres : using table_to_xmlschema on a table with a Box element

python - 在 Amazon Linux 上安装 psycopg2 时出错

regex - 你能用 grep 做所有能用egrep 做的事情吗?

PHP - 不贪婪的正则表达式仍然有点 'greedy'

javascript - 为什么/.../创建的 javascript RegExp 可以工作,但通过 "new RegExp"创建的 JavaScript RegExp 却不能?

jquery - 数字的正则表达式

postgresql - DB 上的状态机,状态转换的执行

postgresql - 在 PostgreSQL 中每行只执行一次延迟触发器