我在TERADATA中有一个场景,例如
表1-col1-'XYZ1234'
包含多个模式的表就像 表2-col1-'XY12%,XYZ%,ABC℅'
注意:以上值是单个Row的特定列中的完整字符串。
。
所以在这里,如果需要在这里做类似的事情
像任何(Table2.col1)= true(1)一样的Table1.Col1。 按照上述方案,表1 col1的值XYZ1234应该与表2 col1 XYZ%的第二个模式匹配,这是正确的。
任何人都可以在这种情况下为我提供帮助。
答案 0 :(得分:1)
我建议在第二张表中保留以下内容:
col1
XY12
XYZ
ABC
然后,您可以按以下方式构建动态LIKE
表达式:
SELECT t1.Col1
FROM table1 t1
INNER JOIN table2 t2
ON t1.Col1 LIKE t2.Col1 || '%';
我建议不要在表中存储通配符%
,因为它是冗余信息,也不是实际数据的一部分。
请注意,如果第一个表中的每个Col1
值可能有多个匹配项,那么我的联接可能会返回重复项。使用SELECT DISTINCT
将是解决此问题的一种方法。
答案 1 :(得分:0)
Teradata实际上支持col1 like any (select col1 from ...)
,但是您需要对输入数据进行规范化。如果您无法按照Tim的建议存储数据,则可以使用表函数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
)