首页 > 解决方案 > 有没有办法在 WHERE 之后的 WHEN 子句中使用不同的运算符/语句

问题描述

我正在尝试创建一个 WHERE 子句,当没有给出参数时,它将只返回所有文件(因此文件名 = 文件名),否则文件名必须像传递的参数一样。

我尝试使用一些解决方案,下面的 2 个(评论中的那个和下面的那个)似乎最有希望,但似乎无法让它们发挥作用。

using"AND Filename = (CASE WHEN @name IS NULL THEN FileName ELSE(@name IS NULL AND FileName = FileName) OR ( FileName LIKE '@name' )"不起作用,因为我需要将 Filename 设置为某些东西(使用 =),但是如果参数已被传递,则它需要是 LIKE 而不是 '=' 并且我似乎没有找到使用不同的方法操作员。

有没有办法解决这个问题?

SELECT Application, CreationDate, Filename
FROM AXSENTINEL.AXSENTINEL.current_664943629
WHERE ISArchived IS NULL
AND Application = 'UL3_ACTO_3MNDWAARDEOVERZIC'
AND CreationDate >= Dateadd(MONTH,-3,getdate())
--AND (@name IS NULL AND Filename = Filename) OR (@name IS NOT NULL AND FileName LIKE '%@name%')
AND Filename = (CASE WHEN @name IS NULL 
                   THEN FileName 
                   ELSE(@name IS NULL AND FileName = FileName) 
OR ( FileName LIKE '@name' )

本质上,我只想在 WHERE 子句中构建某种 IF 代码:

IF @name IS NULL
    THEN Filename = Filename
    ELSE Filename LIKE '%@name%'
FI

标签: sqltsql

解决方案


这个怎么样?

where filename like '%' + coalesce(@name, '') + '%'

推荐阅读