2016-07-25 41 views
1

這可能以前曾被問過,但我不知道如何搜索它。 我想找到,如果在列2串是的一部分,或在列1來自另一列中的列的SQL搜索字符串

Column1  | Column2 
======================= 
ABCDE + JKL |  XC 
XC - PQ  |  A 
XYZ + A  |  C 
AC + PQ  |  MA 

根本不使用所以在第1列從不用於列2的結果將是

C 
MA 
+0

MS SQL服務器2014 – Xion

回答

1

看起來像另一個正則表達式任務,不允許使用正則表達式。

假設你有隻含字母的表達,你可以寫下面的查詢:

CREATE TABLE Expressions 
(
    Column1 varchar(20), 
    Column2 varchar(20) 
) 

INSERT Expressions VALUES 
('ABCDE + JKL', 'XC'), 
('XC - PQ', 'A'), 
('XYZ + A', 'C'), 
('AC + PQ', 'MA'), 
('A+CF', 'ZZ'), 
('BB+ZZ+CF', 'YY') 

SELECT E1.Column2 
FROM Expressions E1 
WHERE NOT EXISTS (
    SELECT * 
    FROM Expressions E2 
    WHERE E1.Column2=E2.Column1 --Exact match 
     OR PATINDEX(E1.Column2+'[^A-Z]%', E2.Column1) <> 0 --Starts with 
     OR PATINDEX('%[^A-Z]'+E1.Column2, E2.Column1) <> 0 --Ends with 
     OR PATINDEX('%[^A-Z]'+E1.Column2+'[^A-Z]%', E2.Column1) <> 0 --In the middle 
) 

它返回:

Column2 
------- 
C 
MA 
YY 
0

說明的問題談到column2中的字符串。 YOu可以在like上做一些修改。在大多數數據庫的一些變化:

select t.* 
from t 
where t.column1 not like '%' || t.column2 || '%'; 

一些數據庫拼||+甚至concat(),但這個想法是一樣的。

但是,我不確定示例數據在做什麼。 column2中的字符串絕不是column1

+0

我使用的MS SQL Server 2014中的字符串在列2中可以出現在任何行中。來自第一個記錄的XC存在於第2行第1列中。第3行存在A.C和MA不存在於任何行中。 – Xion

相關問題