求兼容text与text[]类型列的通用PostgreSQL查询语句
通用查询方案
要适配text和text[]两种列类型,同时支持多值查询,可以通过统一将列转换为数组类型来实现,以下是两种可靠的写法:
写法一:使用CASE转换列类型 + 数组交集操作符&&
SELECT * FROM your_table -- 替换为实际表名 WHERE CASE WHEN pg_typeof(id) = 'text'::regtype THEN ARRAY[id] -- 普通text列转为单元素数组 ELSE id -- 本身就是text[]列,直接使用 END && ARRAY['edfdas', 'a']::text[]; -- 替换为你的查询值数组
原理
pg_typeof(id)判断列的实际类型,区分text和text[]- 把
text列转为单元素数组,让两种类型的列统一为text[] &&操作符检查两个数组是否存在交集,只要查询值中有任意一个存在于列(或列转换后的数组)中,就会返回该行
写法二:结合ANY和类型判断
如果更习惯用ANY语法,可以用以下写法:
SELECT * FROM your_table -- 替换为实际表名 WHERE -- 处理text列:检查列值是否在查询数组中 (pg_typeof(id) = 'text'::regtype AND id = ANY(ARRAY['edfdas', 'a']::text[])) OR -- 处理text[]列:检查数组中是否包含查询数组的任意元素 (pg_typeof(id) = 'text[]'::regtype AND id && ARRAY['edfdas', 'a']::text[]);
注意事项
- 替换
your_table为实际要查询的表名 - 替换
ARRAY['edfdas', 'a']为你的实际查询值,多个值直接在数组中添加即可 pg_typeof是PostgreSQL内置函数,用于获取数据类型,兼容性良好
内容的提问来源于stack exchange,提问作者Mohit Singla
相关产品推荐
相关产品推荐

