PostgreSQL 12在select语句中包含变量
我有一个SQL查询,如下所示PostgreSQL 12在select语句中包含变量,sql,postgresql,Sql,Postgresql,我有一个SQL查询,如下所示 SELECT t.test1 AS test01 FROM my_test_table t WHERE t.test01 LIKE any('{data_nr0%,data_nr1%,data_a%}') 它工作正常,一切都很好,但我不知道如何增强它 在输出中,它将包括ANY()中的额外数据段 我需要一个输出 测试01 参数_ 数据单元nr0123 数据\u nr0 数据单元nr0122 数据\u nr0 数据单元nr0124 数据\u nr0 数据\u nr11
SELECT t.test1 AS test01
FROM my_test_table t
WHERE t.test01 LIKE any('{data_nr0%,data_nr1%,data_a%}')
它工作正常,一切都很好,但我不知道如何增强它
在输出中,它将包括ANY()中的额外数据段
我需要一个输出
测试01
参数_
数据单元nr0123
数据\u nr0
数据单元nr0122
数据\u nr0
数据单元nr0124
数据\u nr0
数据\u nr1123
数据单元1
数据单元nr1122
数据单元1
数据单元nr1124
数据单元1
资料室a123
数据a
找到与案例相关的匹配项
SELECT case when t.test01 LIKE 'data_nr0%' then 'data_nr0'
when t.test01 LIKE 'data_nr1%' then 'data_nr1' end param
, t.test1 AS test01
FROM my_test_table t
WHERE t.test01 LIKE any('{data_nr0%,data_nr1%}')
或者,您可以有一个参数表/cte,然后
-- sample data
with my_test_table(test01) as(
select 'data_nr01' union all
select 'data_nr13'
),
params(val) as (
select 'data_nr0' union all
select 'data_nr1'
)
SELECT t.test01, min(p.val)
FROM my_test_table t
JOIN params p on t.test01 like p.val||'%'
GROUP BY t.test01
感谢您的回答,如果ANY()中有许多值(比如100个值),我是否应该全部写入以防。。。什么时候还是有更好的方法?是的,请参阅更新的答案