【发布时间】:2013-03-22 00:51:45
【问题描述】:
我正在编写一个查询,其中我试图在子查询/CTE 中搜索通配符子字符串,并将此逻辑嵌套在我的 CASE 语句中。例如:
SELECT
CASE
WHEN '%' + text + '%' IN (SELECT Column1 FROM Table) THEN 'I am in Column1'
ELSE text END
FROM Table
不幸的是,似乎没有办法做到这一点。因为我需要使用 LIKE 运算符并且无法同时使用 LIKE 和 IN。我必须分别编写每个 LIKE 语句,这将是 1000 多行。有没有人推荐更直接的解决方案?提前致谢!
-- 编辑:对不起,每个 cmets 的一些说明。一个更好的例子:
UserID | UserPeers | Gender
--------------------------------------------
Mike | Tom1, Bob1 | M
John | Tom1, Greg1 | M
Sally |Mike1, John1 | F
Sara | Sally1, Bob1 | F
在上表中,我需要搜索 UserPeers 列中的子字符串,以查看它们是否存在于 UserID 列中的任何位置。在这种情况下将成功返回的行将是 Sally 和 Sara 下的行,因为 UserID 下存在“Mike”和“Sally”。
SELECT *
FROM Users
WHERE '%' + UserPeers + '%' LIKE (SELECT UserID FROM Users)
这里返回的错误是: 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
【问题讨论】:
-
请用一些示例数据澄清一下。对条件进行 AND 运算呢?
-
不确定我是否关注。您是否只想将
text列与同一行中的Column1进行比较?text是变量还是列名? -
感谢大家的广泛回复,Aaron 的初步回答成功了。卡在 LIKE 上。非常感谢!
标签: sql tsql sql-server-2008-r2 sql-like