【发布时间】:2014-03-22 05:27:37
【问题描述】:
在 Amazon Redshift 表中,我有一个字符串列,我只需要从中提取数字。为此,我目前使用
translate(stringfield, '0123456789'||stringfield, '0123456789')
我正在尝试 REPLACE 功能,但它不会很优雅。
有什么想法先将字符串转换为 ASCII,然后进行一些操作以仅提取数字?或任何其他替代方案。 这里很难,因为 Redshift 不支持函数并且缺少很多传统函数。
编辑: 尝试以下,但它只返回 051-a92 ,因为我需要 05192 作为输出。我正在考虑子字符串等,但我现在只有 regexp_substr 可用。如何摆脱介于两者之间的任何字符
select REGEXP_SUBSTR('somestring-051-a92', '[0-9]+..[0-9]+', 1)
【问题讨论】:
-
最好在放入 Redshift 之前对其进行解析 - 更多功能、更好的性能、更低的成本...
-
@Guy “更多功能、更好的性能、更低的成本……”嗯?您是否调查过大多数分析数据库(Teradata、Vertica 等)的成本? Redshift 便宜,SSD节点快。
-
@JoeHarris,我同意 Redshift 的成本非常低,但这并不意味着您应该用长文本列填充它。如果您可以将它们解析为更具分析性的形式(数字、类别、日期...),则更具可扩展性和成本效益。
标签: sql regex data-conversion amazon-redshift