基于PostgreSQL中输入参数的动态where子句

时间:2018-10-29 06:16:39

标签: postgresql plpgsql

我的plsql过程有一个jsonb参数,数据为{1 = 2,2 = 3}。我的表格包含以下数据,

att_name |att_key |att_value
abcd     |1       |2
bcde     |2       |3
efgh     |1       |3

我想过滤掉应该根据jsonb输入动态生成的(att_key = 1 and att_value = 2)或(att_key = 2 and att_value = 3)的数据,输出将仅包含abcd和bcde。有什么方法可以在postgresql中动态创建此查询。

1 个答案:

答案 0 :(得分:0)

{1=2,2=3}不是有效的JSON。

我认为您的意思是{"1":"2","2":"3"}

您可以使用json_each_text转换为键值对(文本)并轻松进行比较。

SELECT * 
  FROM   t 
WHERE  ( att_key, att_value ) IN (SELECT inp.key :: INT, inp.VALUE :: INT 
     FROM   json_each_text('{"1":"2","2":"3"}') AS inp ); 

Demo