Я сохраняю URL-адрес, указанный ниже, в поле в DE:

https://www.tbd.com/tbd-bags/?utm_source=sfmc&utm_medium=email&utm_campaign=_4in1tbd_20170421&utm_term=nav4+bags&utm_id=9087&sfmc_id=33125

Исходя из этого, я хочу обрезать значение utm_campaign в поле. В итоге должно получиться вот так

4in1tbd_20170421

Возможно ли это через SQL? Может ли кто-нибудь дать мне подходящее решение, пожалуйста?

0
Rítćhįë 8 Июн 2020 в 13:41
2
Вы должны искать регулярное выражение в SQL. Вы хотите сохранить _4in1tbd_20170421 или 4in1tbd_20170421, потому что _ может иметь значение. Это может быть весь параметр utm_campaign. И такие вещи, как подстрока и т.д.
 – 
Johannes Schapdick
8 Июн 2020 в 13:54

2 ответа

Не очень красивое решение, но я могу дать вам довольно тупой подход к подстроке, который заменяет все вокруг вашей строки «пустой строкой», в результате чего получается только ваша целевая строка. «Выполняет свою работу» с некоторыми предположениями:

Предполагая, что вы знаете, что ваша строка всегда будет именно в этом порядке (что важно), вы можете работать с функциями PATINDEX, LEFT, RIGHT, LEN и REPLACE.

PATINDEX возвращает число, представляющее позицию определенной подстроки вашей строки, например indexOf в AMPScript.

===

Подход таков: определите начальный маркер для вашего ожидаемого результата, например. 'мой текст всегда идет сразу после "utm_campaign=".'

Итак, ваш маркер "utm_campaign=". Преимущество UTM_parameters в том, что вы можете ожидать, что они не будут переименованы. Так что я бы посчитал эту часть довольно перспективной.

Замените все ЛЕВОЕ от первого символа этого маркера пустой строкой (это '').

В следующем аналогичном примере это делается с помощью «@» в качестве маркера. Обязательно вычтите длину маркера (в моем случае мой начальный маркер "@" имеет длину 1, в вашем случае "utm_campaign=" имеет длину 13).

Представьте, что у вас есть адрес электронной почты для всех подписчиков:

Мой адрес@домен.com

/* remove everything left of the @ */
SELECT Replace(EmailAddress,
LEFT(EmailAddress,(PATINDEX('%@%',EmailAddress) - 1)),
'') 
FROM _Subscribers

Результат:

@домен.com

Затем определите конечный маркер, например. "мой текст всегда находится справа перед "&utm_term=".

Замените все ПРАВО от начала этого маркера пустой строкой ('')

/* remove everything right of the @ */
SELECT Replace(EmailAddress,
RIGHT(EmailAddress,LEN(EmailAddress) - LEN(RIGHT(EmailAddress,(PATINDEX('%@%',EmailAddress))))),
'') 
FROM _Subscribers

Результат:

Мой адресс@

Если вы знаете, что ваша ожидаемая строка всегда имеет определенную длину, я предлагаю вам работать с ней, а не с конечным маркером. В то время как электронное письмо всегда имеет «@» в середине, не каждая ссылка может иметь «&utm_term=». например, utm_term по какой-то причине отсутствует в вашей ссылке и, таким образом, будет более стабильным решением.

1
Jonas Lamberty 8 Июн 2020 в 15:40

Зачем нагружать SOQL?

  1. Если у вас есть вершина, вызывающая SOQL, прокрутите набор результатов и поиграйте с полем vaue, используя методы String (подстрока, разделение)
  2. В противном случае, если вы хотите обработать значения после извлечения xlsx, используйте макрос.

Если вы можете пролить свет на точное использование этого SOQL, мы можем помочь вам в дальнейшем.

0
clairvoyant 8 Июн 2020 в 17:44
1
Я ожидаю, что ясновидящий заметит, что это вопрос Marketing Cloud ;-)
 – 
zuzannamj
8 Июн 2020 в 20:21