Использовать часть строки как переменную? - PullRequest
0 голосов
/ 21 апреля 2020

Есть кое-что, что я пытаюсь сделать, я не думаю, что это возможно, но, возможно, я ошибаюсь.

Это в teradata, поэтому я не могу использовать переменные.

У меня есть таблица, которая содержит разные сообщения в виде строк:

Ie, столбец MSG содержит 'Hello, how are you today?'

И таблица, которая содержит разных пользователей с user_id и user_name.

Затем отдельно я использую:

SELECT
  MSG,
  USER_ID,
  USER_NAME
FROM MSG_TABLE
INNER JOIN PERSON_TABLE
  ON PERSON_ID.ID = MSG_TABLE.ID

Есть ли способ изменить сообщение в таблице сообщений, чтобы при выборе сообщения часть строки действовала так, как если бы она извлекала информацию из таблица персонала?

Так что MSG в таблице будет выглядеть примерно так: 'Hello @@@, how are you today?', и когда я выполню запрос выше, я получу

 | 'Hello Peter, how are you today?' | 1765 | Peter.

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Не знаю, Terradata, но это должно работать:

SELECT
  OREPLACE(MSG, '@@@', USER_NAME),
  USER_ID,
  USER_NAME
FROM MSG_TABLE
INNER JOIN PERSON_TABLE
  ON PERSON_ID.ID = MSG_TABLE.ID

Дано: OREPLACE

0 голосов
/ 22 апреля 2020

Без изменения существующего шаблона:

select 
  strtok(MSG, ',', 1) || ' ' || USER_NAME || ', ' || strtok(MSG, ',', 2), USER_ID, USER_NAME
FROM MSG_TABLE
INNER JOIN PERSON_TABLE
  ON PERSON_ID.ID = MSG_TABLE.ID;
0 голосов
/ 21 апреля 2020

Я бы посоветовал вам сохранить значение в столбце 'MSG' примерно так:

'Hello {username}, как вы сегодня?'

Тогда вы можете просто использовать функцию ЗАМЕНА

SELECT
  OREPLACE(MSG, '{username}', USER_NAME) AS NEW_MSG,
  USER_ID,
  USER_NAME
FROM MSG_TABLE
INNER JOIN PERSON_TABLE
  ON PERSON_ID.ID = MSG_TABLE.ID
...