有没有一种方法可以在WHERE之后的WHEN子句中使用不同的运算符/语句

时间:2019-06-07 08:46:52

标签: sql tsql

我正在尝试创建一个WHERE子句,当未提供任何参数时,它将仅返回所有文件(因此filename = filename),否则Filename必须类似于传递的参数。

我尝试使用一些解决方案,下面的2个(注解和下面的一个)似乎是最有前途的,但似乎无法使它们起作用。

使用"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

2 个答案:

答案 0 :(得分:0)

(在jarlh的评论中扩展)如果您需要LIKE而不是完全匹配:

where (Filename LIKE '%' + @name + '%' or @name is null)

答案 1 :(得分:0)

怎么样?

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