我正在尝试创建一个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
答案 0 :(得分:0)
(在jarlh的评论中扩展)如果您需要LIKE而不是完全匹配:
where (Filename LIKE '%' + @name + '%' or @name is null)
答案 1 :(得分:0)
怎么样?
where filename like '%' + coalesce(@name, '') + '%'