sql - 有没有办法在 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
解决方案
这个怎么样?
where filename like '%' + coalesce(@name, '') + '%'
推荐阅读
- swagger - OAS3 回调是否也与服务实现部分相关,如果这个回调端点也可能是不同 Swagger 的一部分?
- python - FileNotFoundError:[Errno 2] 没有这样的文件或目录:Google colab 上的“something.zip”?
- node.js - Dockerize angular/nodejs 应用程序
- typescript - 深度必填
带 Shift 不可分配 - postgresql - SQlite3 多对多表迁移到 Postgres 并锁定其列
- reactjs - 如何解决 redux 错误使用自定义中间件进行异步操作?
- python - queryset.values_list 是否再次调用 db?
- javascript - 有什么办法可以避免 localStorage.getItem() 的 key 的未定义值?
- python - 如何在 Django 模型中添加动态 Numpy 数组字段
- pine-script - 错误:“....应该在每次计算中调用以保持一致性。建议从这个范围中提取调用”