如果列在PostgreSQL中包含int和NULL值,如何从text转换为int

sen*_*nin 1 sql postgresql null casting

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

UPDATE table SET data2=CAST(data1 AS INT).
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ský 5

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

UPDATE table SET data2 = cast(nullif(data1, '') AS int);
Run Code Online (Sandbox Code Playgroud)

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

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