2013-03-10 276 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

相關問題