如何在postgres sql中使用参数计算表达式值

如何在postgres sql中使用参数计算表达式值,sql,regex,postgresql,Sql,Regex,Postgresql,我试图在where子句中计算PostgreSQL中的正则表达式 我有一个带有值的列,如下面的示例(1,2)。当我在where子句中编写查询时,我将参数值传递为“a”或“a,b”或“b”,那么它应该只返回包含“a”或“a,b”或“b”的行 当我通过“a”时,它应该检查行值并评估“and”、“OR”条件 示例:1 ((((a.b.city == "x" AND a.b.state == "y" AND a.b.country == "z")) OR (dis(x.y.d1, x.y.d2,

我试图在where子句中计算PostgreSQL中的正则表达式

我有一个带有值的列,如下面的示例(1,2)。当我在where子句中编写查询时,我将参数值传递为“a”或“a,b”或“b”,那么它应该只返回包含“a”或“a,b”或“b”的行

当我通过“a”时,它应该检查行值并评估“and”、“OR”条件

示例:1

((((a.b.city == "x" AND a.b.state == "y" AND a.b.country == "z")) OR 
   (dis(x.y.d1, x.y.d2, "47.6015", "-122.3304") <= 5)) 
  AND ((p.q.test == "**a**") OR (p.q.test == "b")))

请提出建议。

很难弄清楚你在问什么,但我想你想在(…)中加入

例如

相当于

 p.q.test = 'a' OR p.q.test = 'b'
如果要匹配的列表是动态的,则可以将数组作为查询参数传递:

 p.q.test IN (?)
或要匹配的逗号分隔列表:

 p.q.test = ANY (regexp_split_to_array(?,','))
如果您的
p.q.test
是逗号分隔的值列表,则将其拆分,并使用
&&
(数组重叠)运算符将其与可能匹配的数组进行比较:

WITH test(x) AS (VALUES ('a,b'), ('a'), ('b'), ('a,b,c'), ('b,c'), ('d,e'), ('e')) 
SELECT x, regexp_split_to_array(x, ',') && ARRAY['a','b'] FROM test;

   x   | ?column? 
-------+----------
 a,b   | t
 a     | t
 b     | t
 a,b,c | t
 b,c   | t
 d,e   | f
 e     | f
(7 rows)

如果
&&
与您想要的不太匹配,请查看阵列手册;可能是
@>
对于这样的问题,一个样本数据和预期结果的表格使事情更容易理解。在查询中消除不相关的噪音也是如此。请始终提供您的PostgreSQL版本。
 p.q.test IN (?)
 p.q.test = ANY (regexp_split_to_array(?,','))
WITH test(x) AS (VALUES ('a,b'), ('a'), ('b'), ('a,b,c'), ('b,c'), ('d,e'), ('e')) 
SELECT x, regexp_split_to_array(x, ',') && ARRAY['a','b'] FROM test;

   x   | ?column? 
-------+----------
 a,b   | t
 a     | t
 b     | t
 a,b,c | t
 b,c   | t
 d,e   | f
 e     | f
(7 rows)