Подстрока Teradata до и после определенного символа

Я ищу способ извлечь текст, который находится до и после определенного символа в Teradata. Например, у меня есть столбец, который согласован, за исключением слова посередине, которое я хочу извлечь.

У меня есть два примера:

  1. «Аккаунт, активированный клиентом DD: ABCD, ДАТА XXXX»
  2. «Аккаунт, активированный клиентом DD: EFGH, ДАТА XXXX»

Мне нужен текст, который существует сразу после «:» и перед «,» - в данном случае ABCD или EFGH. Пока у меня есть SUBSTRING (column FROM POSITION ('DD: ' IN column) +4), но он возвращает все после ":", например ABCD, ON DATE XXXX.

Вы пробовали SUBSTRING(column FROM POSITION(‘DD: ‘ IN column) FOR 4)?

Rob Paller 18.12.2018 03:31

Это сработало бы, если бы извлекаемые мной символы всегда были одного размера. В итоге я нашел работу, сделав то, что я сделал выше, сначала поместив все во временную таблицу, а затем используя: SUBSTRING ([COLUMN], 0, CHARINDEX (',', [COLUMN])) AS COLUMN_NAME

Victor Khiz 18.12.2018 17:34
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
9 126
2

Ответы 2

Вы можете использовать регулярное выражение для извлечения информации между ':' & ',' для данного требования.

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.

Другие вопросы по теме