【发布时间】:2015-10-05 14:44:48
【问题描述】:
您好 SQL Server 专家。请帮助我将布尔逻辑(与、或)应用于 SQLsServer 中以逗号分隔的输入字符串的有效方法。
例子:
DECLARE @ATable TABLE(ID INT, Value varchar(50))
INSERT INTO @ATable
VALUES (1, 'A'), (1, 'B'), (1, 'C'), (2, 'C'), (2, 'D'), (3, 'A'), (4, 'B')
declare @inputStr varchar(max)
set @inputStr = 'A,B,C,D'
declare @andOr varchar(30) -- can be either 'and' or 'or'
if @andOr = 'and',我想获取同时具有值 A 和 B 的 Id。在上表中,结果将是 Id 为 1 的数据。所以结果将是
ID | Values
-----------
1 | A,B,C
if @andOr = 'or',我想获取值为 A 或 B 的 Id。在上表中,结果将是 Id 为 1,3 和 4 的数据。所以结果将是
ID | Values
-----------
1 | A,B,C
3 | A
4 | B
谢谢。
【问题讨论】:
-
我尝试过使用动态sql,但是当输入字符串的长度增加时它变得很慢
-
您需要将字符串拆分为单独的行,以便能够最好地处理对其进行的任何类型的查询。更好的是 - 首先有一个表值参数而不是字符串!
-
对于 AND 案例,您需要按照 Bridge 的建议进行操作。 IN 子句通常适用于您的 OR 案例。
-
对于您的 @andOr 案例,为什么包含 2 个而排除 4 个?
-
谢谢@Beth。更新
标签: sql sql-server comma boolean-logic