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, он вернет все до '_'