在 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 比较。然而,以上似乎是你想要做的。