Числовые значения из строки - SQL - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблемы с извлечением числовых значений из начала или конца строки.Я планировал использовать функцию SUBSTRING (или ВПРАВО / ВЛЕВО), чтобы изолировать двух или трехзначные числа от начала или конца строки (мне не нужно преобразовывать их в 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 голосов
/ 28 февраля 2019

Это решение для 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.

...