PostgreSQL:批量转换多值查询varchar类型19位整数主键
批量转换19位整数为字符型匹配varchar主键的简洁方法
针对你遇到的问题,这里提供两种简化批量转换的方案,避免逐个值写CAST:
方案1:用VALUES子句统一转换
将所有19位整数放在VALUES子句中,先转为numeric(支持19位整数的精度),再统一转换为varchar,最后通过JOIN匹配:
SELECT t.* FROM my_table t INNER JOIN ( VALUES (1234567891234567891::numeric), (1234567891234567892::numeric), -- 继续添加其他19位整数 (1234567891234567899::numeric) ) AS temp_ids(id) ON t.primary_key = temp_ids.id::varchar;
这种方式只需要在子查询末尾写一次::varchar转换逻辑,不用给每个值单独加CAST。
方案2:直接用字符串数组展开
如果你的19位整数是逗号分隔的字符串(比如从其他地方复制的列表),可以用string_to_array和unnest直接生成字符型的主键列表:
SELECT * FROM my_table WHERE primary_key IN ( SELECT unnest(string_to_array( '1234567891234567891,1234567891234567892,...,1234567891234567899', ',' )) );
这个方法最简洁,只需把所有数字用逗号拼接成一个字符串,无需任何类型转换函数,直接匹配varchar类型的主键。
两种方案都能避免逐行转换的繁琐,且不需要修改表结构权限。
内容的提问来源于stack exchange,提问作者sushi
相关产品推荐
相关产品推荐

