Проблема с REGEXP_SUBSTR - PullRequest
       11

Проблема с REGEXP_SUBSTR

0 голосов
/ 02 мая 2018

У меня есть текст в столбце, например / AB / 25MAR92 / и / AB / 25MAR1992 /. Я пытаюсь извлечь только 25MAR92 и 25MAR1992 из столбца для расчета даты, над которой мне нужно работать. Не могли бы вы помочь с функцией REGEXP_SUBSTR для этой проблемы? Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я предлагаю использовать такой шаблон:

\/(\d{2}[A-Z]{3}(19|20)?\d{2})\/
  • Годы ограничены 1900-2099.

Демо

  • Если вы не хотите разрешать любое двузначное значение для дня \d{2},
    Вы можете добавить этот шаблон вместо (0[1-9]|[12][0-9]|3[01]), который соответствует 01-31;

    \/((0[1-9]|[12][0-9]|3[01])[A-Z]{3}(19|20)?\d{2})\/

  • Или если вы разрешите такие даты, как /AB/2MAR92/, у которых есть дни без начального нуля
    вместо этого добавьте (0[1-9]|[12][0-9]|3[01]|[1-9]):

    \/((0[1-9]|[12][0-9]|3[01]|[1-9])[A-Z]{3}(19|20)?\d{2})\/

Я использовал / в качестве якорей. Если вам это не нравится, вы можете использовать \b.


В ответ на ваши последние комментарии мой рекомендуемый шаблон выглядит следующим образом:

\b\d{1,2}[A-Z]{3}(?:19|20)?\d{2}\b
0 голосов
/ 02 мая 2018

Вы можете попробовать:

\b\d{1,2}[A-Z]{3}\d{2,4}\b

но это также будет соответствовать 02MAR992. Чтобы исключить эту возможность, используйте:

\b\d{1,2}[A-Z]{3}(?:\d{2}|\d{4})\b

Это будет соответствовать 02MAR1992 и 02MAR92, но не будет соответствовать 02MAR992.

...