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

如果列在PostgreSQL中同时包含int和NULL值,如何从文本转换为int,sql,postgresql,casting,null,Sql,Postgresql,Casting,Null,如标题所示。我有一列有一些文本值。例如,列data1的值为'31',32',NULL。现在我想用data1中的数据更新另一列,比如data2 type INT,所以我尝试这样做: UPDATE table SET data2=CAST(data1 AS INT). 问题是因为PostgreSQL无法将NULL或空值转换为INT。实际上,您可以将NULL转换为INT,但不能将空字符串转换为INT。如果data1包含空字符串或NULL,则假设您希望在新列中使用NULL,您可以执行以下操作: UPD

如标题所示。我有一列有一些文本值。例如,列data1的值为'31',32',NULL。现在我想用data1中的数据更新另一列,比如data2 type INT,所以我尝试这样做:

UPDATE table SET data2=CAST(data1 AS INT).
问题是因为PostgreSQL无法将NULL或空值转换为INT。

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