字符串中的数值-SQL

时间:2019-02-28 13:54:54

标签: postgresql amazon-web-services amazon-redshift data-cleansing

我遇到了从字符串开头或结尾提取数值的问题。我打算使用SUBSTRING函数(或RIGHT / LEFT),以便从字符串的开头或结尾隔离两个或三个数字(我不需要将它们转换为INT)。但是我有两个问题:

  • 我的列是一个字符串

  • 并非所有字符串的开头或结尾都有数字。

为了解决第一个问题,我尝试使用函数ISNUMERICAL(以了解我在哪里有数值),但出现错误,指出SQL Amazon Redshift中不存在该错误。然后,我想在所有没有数字作为第一个或最后一个字符的其他输入中获得0。在下面,您可以看到我的列的样子,在右边(箭头之后)可以看到我想要的输出结果。

column_name | result
------------|-------
12aaaaaa    | 12
375aaaaa    | 375
98aaaaaa    | 98
aaaaaa89    | 89
aaaaaa34    | 34
aaaaa567    | 567
aaaaaa8a    | 0
aaaaaaaa    | 0
a7aaaaaa    | 0

你们中有人知道我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是PostgreSQL的解决方案:

这里是一种变体,首先将字符串分成多个部分,然后选择合适的字符串:

SELECT CASE WHEN p[1] <> ''
            THEN p[1]::integer
            WHEN p[array_upper(p, 1)] <> ''
            THEN p[array_upper(p, 1)]::integer
            ELSE 0
       END
FROM (SELECT regexp_split_to_array(string, '[^\d]+') AS p
      FROM strings) AS q;

这假定表名为strings,列名为string

相关问题