如何在postgres sql中使用参数计算表达式值
我试图在where子句中计算PostgreSQL中的正则表达式 我有一个带有值的列,如下面的示例(1,2)。当我在where子句中编写查询时,我将参数值传递为“a”或“a,b”或“b”,那么它应该只返回包含“a”或“a,b”或“b”的行 当我通过“a”时,它应该检查行值并评估“and”、“OR”条件 示例:1如何在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,
((((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)