我的字段中有 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]
-1
或Q
、任意字符和数字
-
-
|
- 或者-
0.[1-9]
-0
、任何字符和非零数字
-
-
)
- 非捕获组的结束。
关于regex - Postgres SQL WHERE 子句在模式匹配中包含 'OR',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64747750/