由于空值,无法将红移列转换为整数

我有一个红移表,其中有一列很少有空值。预计只有整数值,但有些地方存在空值。当我尝试使用 :: 投射它时,它会抛出错误 -

[代码:500310,SQL 状态:XX000] Amazon 无效操作:无效数字,值“B”,位置 0,类型:整数详细信息:


错误:无效数字,值“B”,位置 0,类型:整数代码:1207 上下文:BEVEL_ON 查询:34112149 位置::0 进程:query1_836_34112149 [pid=0]


stack overflow Unable to cast redshift column to integer due to empty values
原文答案

答案:

作者头像

所以要澄清一下,您有一个文本列大部分时间都包含数字字符,并且您希望将其大小写为整数,对吗?听起来您还认为唯一的非数字值是空字符串 ''。

如果是这种情况,那么解决方案就相当简单——在转换之前将空字符串更改为 NULL。 DECODE 语句是我的目标:

DECODE(col_X, '', NULL, col_X)::INT

如果列中有更多不同的字符串集,则需要使用 regexp_replace() 去除所有非数字字符。

作者头像
text_to_int_alt(
case 
when regexp_replace(convert(varchar, creative_id), '[^0-9]', '') <> '' then 
regexp_replace(convert(varchar, creative_id), '[^0-9]', '') 
end)