我遇到了从字符串开头或结尾提取数值的问题。我打算使用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
你们中有人知道我可以解决这个问题吗?
答案 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
。