2013-03-10 98 views
0

在SQL查询(DB2)中,如何在另一个字段中查找字段值? 例如,Field01包含零件号码'1234'。 Field02包含“这是我的1234要保留”在SQL查询(DB2)中,如何在另一个字段中查找字段值?

如何在Field02中找到或搜索Field01的任何值?

我试过LOCATE和LIKE和%%和位置,但似乎无法得到它。

只要位于Field02的开头,我已经能够在Field02中找到Field01,但是如果它是由其他字符继承的,则不能。 这是我使用这个命令:

CASE 
    WHEN LEFT (TRIM (FIELD02), CHARACTER_LENGTH (TRIM (FIELD01))) = 
    TRIM (WMCPIL) THEN TRIM (FIELD02) 
ELSE '^' 
END 
+0

你尝试'CONTAINS'? – Sygmoral 2013-03-10 21:44:27

+0

编辑您的问题并显示您使用'LOCATE'功能尝试的示例。 'LOCATE(field01,field02)'应该返回非零值,如果没有找到则返回零。 – BellevueBob 2013-03-10 22:06:24

回答

0

您可以按以下方式使用LIKE

SELECT * 
FROM mytable 
WHERE field2 LIKE '%' || field1 || '%' 

SQLFiddle demo(使用PostgreSQL作为SQLFiddle不支持DB2还没有,但这个例子应该也在DB2上工作)。

DB2倾向于使用CONCAT来连接字符串,但它也支持标准||作为同义词。

+0

当右侧表达式包含列名时,'LIKE'似乎在DB2中存在问题。这可能会导致比较问题。 – 2013-11-04 20:55:00

+0

FWiW:在我看到的这种场景中* issue *的来源通常是使用固定长度字符数据类型的字段而不是变长字段,但意图是搜索应该在修剪或剥离该领域的价值;即而不是'LIKE'%'|| field1 || '%'',通常会达到所需的效果,而不是'LIKE'%'|| RTRIM(field1)|| '%''或'LIKE'%'||的更积极的剥离\修剪TRIM(field1)|| '%'' – CRPence 2016-08-14 23:19:59

0

LOCATE功能应该工作:

SELECT * 
FROM table_name 
WHERE LOCATE(field01,field02) <> 0 

,你已经尝试过LOCATE你的问题状态;如果它不起作用,请解释。

Here是一个文档参考。

0

它工作正常,尝试它 -

SELECT * FROM TAB1其中位点(FIELD1,FIELD2,CODEUNITS16)<> 0

相关问题