0

我正在寻找一种方法来过滤 A 列与 B 列类似的行。在下面的查询中,我希望返回第一行。最近没怎么用 SQL,所以有点生疏了,但是这个简单的任务一直困扰着我。

CREATE TABLE #T (A VARCHAR (100), B VARCHAR (100))
INSERT INTO #T VALUES ('Anton', 'AntonBertus'), ('Leo', 'Huub')

我的错误尝试:

SELECT * FROM #T WHERE A LIKE B
SELECT * FROM #T WHERE A LIKE '%'+B+'%'

DECLARE @B VARCHAR (100)
SET @B = (SELECT B FROM #T)
SELECT * FROM #T WHERE CONTAINS (A, @B)
4

3 回答 3

3

每当您使用like时,您希望较长的值位于运算符的左侧,较小的值位于like运算符的右侧:

Where 'Zohar Peled' LIKE 'Zohar%' -- will give a result
Where 'Zohar' LIKE 'Zohar Peled%' -- will not give a result

假设您不知道哪一列的值更长,您可以使用or

SELECT A, B
FROM #T
WHERE A LIKE '%'+ B +'%'
OR B LIKE '%'+ A +'%'

这应该会给你你正在寻找的结果。

于 2019-08-14T12:21:08.880 回答
1

您可以尝试如下的 LIKE 运算符。如果 B 的任何部分是 LIKE A,这将返回该行。

SELECT * FROM #T
WHERE B LIKE '%'+A+'%'

如果您只想检查开始部分,请使用以下脚本 -

SELECT * FROM #T
WHERE B LIKE ''+A+'%'
于 2019-08-14T12:20:12.960 回答
0

你的答案应该是这样的:-

SELECT * FROM #T 

SELECT
    *
FROM #T t
WHERE B LIKE '%' + t.A + '%'

输出:-

在此处输入图像描述

于 2019-08-14T12:27:16.813 回答