REGEXP_SUBSTR转换后的输出不会转换为整数

时间:2014-03-27 15:54:43

标签: sql regex casting integer amazon-redshift

我尝试使用下面的REGEXP_SUBSTR Sql函数从20个字符的字符串中提取所有数字。

select
REGEXP_SUBSTR(substring(mycolumn,1,20), '^[0-9]', 1)
|| REGEXP_SUBSTR(substring(mycolumn,1,20), '^[0-9]', 2)
|| REGEXP_SUBSTR(substring(mycolumn,1,20), '^[0-9]', 3)
...
...
|| REGEXP_SUBSTR(substring(mycolumn,1,20), '^[0-9]', 20)
from tbl;

但是当尝试将其转换为bigint / decimal或任何数字数据类型时,它会因Invalid input syntax for type numericInvalid digit, Value '2', Pos 0, Type: Long而失败 等等。

我错过了什么吗? REGEXP_SUBSTR连接的典型输出为105622,0044,022等。查询在Redshift数据仓库上运行,并且REGEXP_REPLACE / TRANSLATE尚未出现在那里。

1 个答案:

答案 0 :(得分:2)

看起来每当字符串中没有数字时,regexp_substr的上述连接就会返回空字符串(''),这不支持转换为整数。所以我使用了NULLIF (regex expression, '')