Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL 12在select语句中包含变量_Sql_Postgresql - Fatal编程技术网

PostgreSQL 12在select语句中包含变量

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

我有一个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 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个值),我是否应该全部写入以防。。。什么时候还是有更好的方法?是的,请参阅更新的答案