2014-03-27 49 views
2

我尝试使用下面的REGEXP_SUBSTRql函数提取20个字符的字符串中的所有数字。REGEXP_SUBSTR转换后的输出不是以整数形式输出

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 /小数或任何数字数据类型,它与Invalid input syntax for type numericInvalid digit, Value '2', Pos 0, Type: Long 等故障时。

我错过了一些东西吗? REGEXP_SUBSTR级联的典型输出是105622,0044,022等。查询在Redshift数据仓库上运行,并且REGEXP_REPLACE/TRANSLATE尚未存在。

回答

2

看起来像字符串中没有数字时,上面的regexp_substr连接就返回空字符串(''),这个字符串不被转换为整数。所以我用了NULLIF (regex expression, '')