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)
通常,您的输入将符合某种可用于使用SUBSTRING()
with进行解析的模式CHARINDEX() { aka STRPOS(), POSITION() }
。
例如,找到第一个连字符和第二个连字符并获取它们之间的数据。
如果不是(并且假设您的字符范围仅限于 ASCII),那么您最好的选择是嵌套 26 个以上的REPLACE()
函数来删除所有标准字母字符(以及所有标点符号)。
如果你的数据中有多字节字符,那么这是不可能的。