Как извлечь значение числового значения c с помощью REGEXP_EXTRACT в BigQuery? - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь извлечь только цифры из определенного столбца в BigQuery. Соответствующие поля имеют следующий формат: value = "Livraison_21J | Relais_19J" или "RELAIS_15 DAY". Я пытаюсь извлечь количество дней для каждого значения, которому предшествует ключевое слово "Relais". Дни колеблются от 1 до 100.

Я использовал это для этого:

SELECT CAST(REGEXP_EXTRACT(delivery, r"RELAIS_([0-9]+J)") as string) as relayDay
FROM TABLE

Я хочу иметь возможность извлечь только количество дней независимо от строки, которая идет после числа, будь то "J" или "ДЕНЬ".

Пример данных:

RETRAIT_2H|LIVRAISON_5J|RELAIS_5J    |     5J

LIVRAISON_21J|RELAIS_19J             |     19J

LIVRAISON_21J|RELAIS_19J             |     19J

RETRAIT_2H|LIVRAISON_3J|RELAIS_3J    |     3J

1 Ответ

1 голос
/ 05 марта 2020

Вы можете использовать

REGEXP_EXTRACT(delivery, r"(?:.*\D)?(\d+)\s*(?:J|DAY)")

См. Демоверсию regex

Подробности

  • (?:.*\D)? - необязательная группа без захвата, которая соответствует 0+ символам, отличным от максимально возможного числа символов разрыва строки, а затем не символу git (этот шаблон необходим для продвижения индекса до местоположения непосредственно перед последней последовательностью цифр , а не последний di git)
  • (\d+) - Группа 1 (только то, что возвращает REGEXP_EXTRACT): одна или несколько цифр
  • \s* - 0+ пробелов
  • (?:J|DAY) - J или DAY подстрок.
...