如果列在 PostgreSQL 中同时包含 int 和 NULL 值,如何从文本转换为 int

Posted

技术标签:

【中文标题】如果列在 PostgreSQL 中同时包含 int 和 NULL 值,如何从文本转换为 int【英文标题】:How to cast from text to int if column contain both int and NULL values in PostgreSQL 【发布时间】:2011-01-07 14:17:17 【问题描述】:

如标题。我有一列有一些文本值。例如,列 data1 具有值 ('31',32','',NULL)。现在我想用 data1 中的数据更新另一列,比如 data2(类型 INT),所以我正在尝试做这样的事情:

UPDATE table SET data2=CAST(data1 AS INT).

问题是因为 PostgreSQL 不能将 NULL 或空值转换为 INT。

【问题讨论】:

【参考方案1】:

实际上,您可以将NULL 转换为int,只是不能将空字符串转换为int。假设如果 data1 包含空字符串或 NULL,则新列中需要 NULL,您可以执行以下操作:

UPDATE table SET data2 = cast(nullif(data1, '') AS int);

如果你想要一些其他的逻辑,你可以使用例如(空字符串转换为-1):

UPDATE table SET data2 = CASE WHEN data1 = '' THEN -1 ELSE cast(data1 AS int) END;

【讨论】:

以上是关于如果列在 PostgreSQL 中同时包含 int 和 NULL 值,如何从文本转换为 int的主要内容,如果未能解决你的问题,请参考以下文章

使用表中的列在 PostgreSQL 中创建视图

列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。[ntext] [重复]

如何将 Postgresql 布尔值转换为 MySQL Tinyint?

根据日期列在pandas Dataframe中插入行

基准测试:PostgreSQL 上的 bigint 与 int

根据其他列在列中插入实数 OLD INSERTs