在 SQL 服务器的 WHERE 子句中使用 CASE 语句
Using a CASE statement in a WHERE clause in SQL Server
我正在尝试在网站上创建查询表单。第一个对象是带有运算符的下拉列表。下拉列表中的默认第一个值为 NULL(1),第二个值为 LIKE(2),等等...第二个对象是一个文本框,用户可以在其中输入字符串,例如 "A".
因此,我正在尝试构建以下 SQL 查询来模拟来自网站的变量。它运行和 returns 时的所有值 @op = 1
。但是当我更改 @op = 2
:
时,我不断收到以下错误
Conversion failed when converting the nvarchar value 'Tom LIKE A%' to data type int."
DECLARE @StartDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @EndDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @Op INT = 2
DECLARE @name NVARCHAR(25) = 'A'
SELECT
name,
dttm
FROM
tableName
WHERE
dttm BETWEEN @StartDate AND @EndDate
AND CASE @Op
WHEN 1 THEN 1
WHEN 2 THEN name + ' LIKE ' + @name +'%'
END <> 0
不要使用 case
。只需使用常规布尔逻辑:
WHERE dttm BETWEEN @StartDate AND @EndDate AND
( (@op = 1) OR
(@op = 2 AND name LIKE @name + '%')
)
您的具体问题涉及在字符串中构建 LIKE
比较。然而,以上似乎是你想要做的。
我正在尝试在网站上创建查询表单。第一个对象是带有运算符的下拉列表。下拉列表中的默认第一个值为 NULL(1),第二个值为 LIKE(2),等等...第二个对象是一个文本框,用户可以在其中输入字符串,例如 "A".
因此,我正在尝试构建以下 SQL 查询来模拟来自网站的变量。它运行和 returns 时的所有值 @op = 1
。但是当我更改 @op = 2
:
Conversion failed when converting the nvarchar value 'Tom LIKE A%' to data type int."
DECLARE @StartDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @EndDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00'
DECLARE @Op INT = 2
DECLARE @name NVARCHAR(25) = 'A'
SELECT
name,
dttm
FROM
tableName
WHERE
dttm BETWEEN @StartDate AND @EndDate
AND CASE @Op
WHEN 1 THEN 1
WHEN 2 THEN name + ' LIKE ' + @name +'%'
END <> 0
不要使用 case
。只需使用常规布尔逻辑:
WHERE dttm BETWEEN @StartDate AND @EndDate AND
( (@op = 1) OR
(@op = 2 AND name LIKE @name + '%')
)
您的具体问题涉及在字符串中构建 LIKE
比较。然而,以上似乎是你想要做的。