Как проверить, соответствует ли строка конкретному шаблону в строке, содержащей несколько похожих шаблонов? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть сценарий в TERADATA, например,

Таблица 1 - col1- 'XYZ1234'

И таблица, содержащая несколько шаблонов, похожа на Таблица 2-col1 - 'XY12%, XYZ%,ABC℅ '

Примечание. Приведенное выше значение является полной строкой в ​​отдельном столбце отдельной строки.

.

Так что здесь, если здесь нам нужно сделать что-то вроде

Table1.Col1 Like Any (Table2.col1) = true (1).В соответствии с приведенным выше сценарием это должно быть верно, поскольку таблица 1 col1 имеет значение XYZ1234, которое соответствует второму шаблону, если table2 col1 XYZ%.

Может ли кто-нибудь помочь мне с этим сценарием.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Teradata на самом деле поддерживает col1 like any (select col1 from ...), но вам необходимо нормализовать ваши входные данные.Если вы не можете сохранить данные, как предложил Тим, вы можете сделать это на лету, используя табличную функцию StrTok_Split_To_Table:

WITH cte AS 
  ( 
    SELECT 1 AS inkey -- needed as input for the table function, can be a column
      ,col1 FROM t2
  )
SELECT * FROM t1
WHERE col1 LIKE ANY 
 (
   SELECT trim(token) -- to remove leading spaces (could be done also using both ' ,' as split character)
   FROM TABLE (StrTok_Split_To_Table(cte.inkey, cte.col1, ',' )
               RETURNS (outkey INTEGER,
                        tokennum INTEGER,
                        token VARCHAR(40) CHARACTER SET Unicode)
              ) AS d 
 )
0 голосов
/ 12 февраля 2019

Я предлагаю оставить для второй таблицы следующее:

col1
XY12
XYZ
ABC

Затем вы можете построить динамическое выражение LIKE следующим образом:

SELECT t1.Col1
FROM table1 t1
INNER JOIN table2 t2
    ON t1.Col1 LIKE t2.Col1 || '%';

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

Обратите внимание, что если может быть несколько совпадений для каждого значения Col1 в первой таблице,мое соединение может вернуть дубликаты.Использование SELECT DISTINCT будет одним из способов обойти эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...