PostgreSQL如何转换多个值

PostgreSQL how to cast multiple values

提问人:sushi 提问时间:11/16/2023 更新时间:11/16/2023 访问量:40

问:

我有一个PostgreSQL数据库,其主键列类型为。 键应为 ,例如 我想对 PK 列做一个简单的查询character varying length 3219 digit integer1234567891234567891

SELECT *
FROM my_table
WHERE primary_key = 1234567891234567891

这给了我错误:

operator does not exist: character varying = bigint

我不能将列转换为 a,因为它总是 19 位数字,所以我将数字转换为键入。CASTbigintcharacter varying

但是,由于我有一长串键,我更喜欢一个简洁的函数来转换它们,而不是逐行转换。这是我同时所拥有的:

SELECT *
FROM my_table
WHERE primary_key IN (CAST(1234567891234567891 AS character varying), 
                      CAST(1234567891234567892 AS character varying),
                      /* ... so on so forth ... */
                      CAST(1234567891234567899 AS character varying))

我只是一个用户,所以我无权将列类型更改为 numeric(19)

SQL PostgreSQL 选择 转换

评论

1赞 PM 77-1 11/16/2023
这个“一长串钥匙”从何而来?
0赞 sushi 11/16/2023
CSV 文件。记录从 Oracle 迁移到 PostgreSQL,并给了我一个记录列表来抽查比较。
0赞 Adrian Maxwell 11/16/2023
显示您的完整脚本,如果您正在从 CSV 中读取,您正在用它做什么。为什么不将文件中的项目插入到 varchar 列中?即使用引号与不使用引号不同'1234567891234567891'1234567891234567891
0赞 Adrian Klaver 11/16/2023
1) .2) 如 .然后使用数组调整@FrankHeikens答案。... WHERE primary_key = '1234567891234567891'WHERE primary_key::bigint = 1234567891234567891select '1234567891234567891'::bigint = 1234567891234567891; tbigint
0赞 sushi 11/16/2023
我只是在记事本++中打开它并将值复制到查询中。在 Excel 中打开它不起作用,因为 Excel 认为该列是一个数字,它会将其四舍五入。该查询是我的完整“脚本”。我想如果PostgreSQL中有某种read_csv函数也可以工作。将尝试弗兰克的解决方案。

答:

0赞 Frank Heikens 11/16/2023 #1

您可以创建一个键数组,并只强制转换一次:

WHERE primary_key =ANY('{123,456,789}'::text[])