這可能以前曾被問過,但我不知道如何搜索它。 我想找到,如果在列2串是的一部分,或在列1來自另一列中的列的SQL搜索字符串
Column1 | Column2
=======================
ABCDE + JKL | XC
XC - PQ | A
XYZ + A | C
AC + PQ | MA
根本不使用所以在第1列從不用於列2的結果將是
C
MA
這可能以前曾被問過,但我不知道如何搜索它。 我想找到,如果在列2串是的一部分,或在列1來自另一列中的列的SQL搜索字符串
Column1 | Column2
=======================
ABCDE + JKL | XC
XC - PQ | A
XYZ + A | C
AC + PQ | MA
根本不使用所以在第1列從不用於列2的結果將是
C
MA
看起來像另一個正則表達式任務,不允許使用正則表達式。
假設你有隻含字母的表達,你可以寫下面的查詢:
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
說明的問題談到column2
中的字符串。 YOu可以在like
上做一些修改。在大多數數據庫的一些變化:
select t.*
from t
where t.column1 not like '%' || t.column2 || '%';
一些數據庫拼||
爲+
甚至concat()
,但這個想法是一樣的。
但是,我不確定示例數據在做什麼。 column2
中的字符串絕不是column1
。
我使用的MS SQL Server 2014中的字符串在列2中可以出現在任何行中。來自第一個記錄的XC存在於第2行第1列中。第3行存在A.C和MA不存在於任何行中。 – Xion
MS SQL服務器2014 – Xion