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

发布于 2024-10-11 01:17:53 字数 223 浏览 1 评论 0原文

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

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

问题是因为 PostgreSQL 无法将 NULL 或空值转换为 INT。

As in title. I have one column which has some text values. For example column data1 has values ('31',32','',NULL). Now I want to update another column say data2 (type INT) with data from data1, so I am trying to do something like that:

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

The problem is because PostgreSQL cannot cast NULL or empty values to INT.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

献世佛 2024-10-18 01:17:53

实际上,您可以将 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;

Actually, you can cast NULL to int, you just can't cast an empty string to int. Assuming you want NULL in the new column if data1 contains an empty string or NULL, you can do something like this:

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

If you want some other logic, you can use for example (empty string converts to -1):

UPDATE table SET data2 = CASE WHEN data1 = '' THEN -1 ELSE cast(data1 AS int) END;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文