SQL搜索字符串来自另一列中的列

时间:2016-07-25 21:17:30

标签: sql sql-server tsql

之前可能已经提出过,但我不确定如何搜索它。 我想找出Column2中的字符串是否是Column1

中的一部分,或者根本不使用它
Column1       | Column2
=======================
ABCDE + JKL   |     XC
XC - PQ       |      A   
XYZ + A       |     C
AC  + PQ      |     MA

因此第1列中从未使用的column2的结果将是

C
MA

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

问题的描述谈到了column2中的字符串。你可以通过like的一些变化做到这一点。在大多数数据库中,有一些变体:

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

有些数据库将||拼写为+甚至是concat(),但这个想法是一样的。

但是,我不确定样本数据在做什么。 column2column1中的字符串不是{。}}。