我尝试使用下面的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 numeric
或Invalid digit, Value '2', Pos 0, Type: Long
而失败
等等。
我错过了什么吗? REGEXP_SUBSTR连接的典型输出为105622,0044,022等。查询在Redshift数据仓库上运行,并且REGEXP_REPLACE / TRANSLATE尚未出现在那里。
答案 0 :(得分:2)
看起来每当字符串中没有数字时,regexp_substr的上述连接就会返回空字符串(''),这不支持转换为整数。所以我使用了NULLIF (regex expression, '')