Redshift SQL - 从字符串中提取数字

and*_*boy 6 regex sql data-conversion amazon-redshift

在 Amazon Redshift 表中,我有一个字符串列,我只需要从中提取数字。为此,我目前使用

translate(stringfield, '0123456789'||stringfield, '0123456789')
Run Code Online (Sandbox Code Playgroud)

我正在尝试 REPLACE 函数,但它不会很优雅。

有什么想法可以先将字符串转换为 ASCII,然后执行一些操作来仅提取数字吗?或者任何其他替代方案。这里很难,因为 Redshift 不支持功能并且缺少很多传统功能。

编辑:尝试下面的方法,但它只返回 051-a92,因为我需要 05192 作为输出。我正在考虑子字符串等,但我现在只有 regexp_substr 可用。如何去掉中间的任何字符

select REGEXP_SUBSTR('somestring-051-a92', '[0-9]+..[0-9]+', 1)
Run Code Online (Sandbox Code Playgroud)

Joe*_*ris 0

通常,您的输入将符合某种可用于使用SUBSTRING()with进行解析的模式CHARINDEX() { aka STRPOS(), POSITION() }

例如,找到第一个连字符和第二个连字符并获取它们之间的数据。

如果不是(并且假设您的字符范围仅限于 ASCII),那么您最好的选择是嵌套 26 个以上的REPLACE()函数来删除所有标准字母字符(以及所有标点符号)。

如果你的数据中有多字节字符,那么这是不可能的。