我尝试使用如下所示的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 /十进制或任何数字数据类型时,使用Invalid input syntax for typenumeric或失败Invalid digit, Value '2', Pos 0, Type: Long ,以此类推。
Invalid input syntax for typenumeric
Invalid digit, Value '2', Pos 0, Type: Long
我错过了什么吗?REGEXP_SUBSTR串联的典型输出是105622,0044,022等。查询在Redshift数据仓库上运行,那里还不存在REGEXP_REPLACE / TRANSLATE。
看起来只要字符串中没有数字,上述regexp_substr的串联就会返回空字符串(’‘),该字符串不支持强制转换为整数。所以我用了NULLIF (regex expression, '')
NULLIF (regex expression, '')