Я ищу способ извлечь текст, который находится до и после определенного символа в Teradata. Например, у меня есть столбец, который согласован, за исключением слова посередине, которое я хочу извлечь.
У меня есть два примера:
Мне нужен текст, который существует сразу после «:» и перед «,» - в данном случае ABCD или EFGH. Пока у меня есть SUBSTRING (column FROM POSITION ('DD: ' IN column) +4)
, но он возвращает все после ":", например ABCD, ON DATE XXXX
.
Это сработало бы, если бы извлекаемые мной символы всегда были одного размера. В итоге я нашел работу, сделав то, что я сделал выше, сначала поместив все во временную таблицу, а затем используя: SUBSTRING ([COLUMN], 0, CHARINDEX (',', [COLUMN])) AS COLUMN_NAME
Вы можете использовать регулярное выражение для извлечения информации между ':' & ',' для данного требования.
SELECT regexp_substr('Customer Activated Account DD: EFGH, ON DATE XXXX','[^:,]+',1,2);
SELECT regexp_substr('Customer Activated Account DD: ABCD, ON DATE XXXX','[^:,]+',1,2);
[^ :,] используется для разделения строки, а затем слово второй позиции является обязательным выводом
Я согласен, что в этом случае лучше использовать regexp_substr. Если бы ваш разделитель был исправлен, strtok может быть весьма полезным. В вашем случае это может сработать:
STRTOK(STRTOK(column,':',2),',',1)
Первый аргумент - это входная строка / столбец; второй разделитель; и третий - номер наблюдения n.
Вы пробовали
SUBSTRING(column FROM POSITION(‘DD: ‘ IN column) FOR 4)
?