Запрос Postgres для получения определенного текста из данного текста - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть такой текст в разных строках столбца

  • xxxxxxxxxxx ab_88_2018 xxxxxx
  • ab_88_2018 xxxxxx
  • AB_88_2018 xxxxxx
  • ab_2018_88 XXXXXX

Так что я хочу только 88 из текста в другой столбец. Какой может быть запрос?

Это не 88, а два числа в этой позиции

1 Ответ

0 голосов
/ 10 сентября 2018

88 всегда 2-значный номер? Если это так, это работает для меня для Postgres и Redshift, и я верю, что вы получите то, что вы хотите:

SELECT
CASE
  WHEN LOWER(column)
    ~ '.*[a-z]{2}\_[0-9]{2}\_[0-9]{4}.*' THEN SPLIT_PART(column,'_',2)
  WHEN LOWER(column)
    ~ '[a-z]{2}\_[0-9]{4}\_[0-9]{2}.*' THEN LEFT(SPLIT_PART(column,'_',3),2)
    END As get_two_digit_number

~ (тильда) похожа на LIKE, но позволяет выполнять сопоставление с шаблоном с помощью регулярных выражений. Посмотрите regexr.com и вставьте свои примеры и код между '', чтобы увидеть, что он соответствует

SPLIT_PART берет строку, соответствующую шаблону, а затем разбивает ее на символе по моему выбору, здесь это '_'. Последний номер, который перерыв, чтобы вернуться

Используя в качестве примера «xxxxxxxxxxx ab_88_2018 xxxxxx», SPLIT_PART («xxxxxxxxxxx ab_88_2018 xxxxxx», «», 2) вернет «88», поскольку 88 - вторая часть после «». Если вы введете 1, он вернет все до '_'

...