PostgreSQL中如何选择全列并转换指定列类型且避免重复列
PostgreSQL 查询避免重复列的正确方法
你忽略了PostgreSQL中列排除语法的使用规则:EXCEPT 用于排除列时,必须搭配表限定的 .*,不能直接和单独的 * 一起使用。
正确写法(PostgreSQL 12+ 支持)
直接在表名(或别名)后使用 .* EXCEPT (列名) 来排除不需要的原始列,再加上转换后的列即可:
SELECT my_table.* EXCEPT (column1, column2), CAST(column1 AS varchar) AS column1, CAST(column2 AS varchar) AS column2 FROM my_table
注意给转换后的列加上别名(AS column1),确保结果集的列名和原表一致。
旧版本兼容方案(PostgreSQL 12 之前)
如果你的PostgreSQL版本不支持列排除语法,可以通过信息模式动态生成查询语句:
-- 生成查询SQL SELECT string_agg( CASE WHEN column_name IN ('column1', 'column2') THEN 'CAST(' || quote_ident(column_name) || ' AS varchar) AS ' || quote_ident(column_name) ELSE quote_ident(column_name) END, ', ' ) FROM information_schema.columns WHERE table_name = 'my_table' AND table_schema = 'public'; -- 替换为你的表所在schema
执行这条语句会得到拼接好的完整查询SQL,复制后直接执行即可。
内容的提问来源于stack exchange,提问作者Shadow Walker
相关产品推荐
相关产品推荐

