首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用case替换coalesce

用case替换coalesce
EN

Stack Overflow用户
提问于 2016-08-09 18:55:11
回答 2查看 845关注 0票数 2

我如何重构这个查询,使其不存在COALESCE或ISNULL?我能把它改成大小写吗?有没有其他方法可以重构它?

代码语言:javascript
运行
复制
SELECT * FROM MockDb WHERE 
COALESCE(Column1,0) = @value1 AND 
COALESCE(Column2,0) = @value2 AND 
COALESCE(Column3,0) = @value3 AND 
COALESCE(Column4,0) = @value4 AND 
COALESCE(Column5,0) = @value5
EN

回答 2

Stack Overflow用户

发布于 2016-08-09 18:59:27

这似乎是一种奇怪的逻辑--将列中的NULL值视为"0“。

你可以这样写:

代码语言:javascript
运行
复制
where (column1 = @value1 or @value1 = 0 and column1 is null) and
      (column2 = @value2 or @value2 = 0 and column2 is null) and
      . . . 

通常,需要考虑的是允许参数的NULL值。我希望看到这样的逻辑:

代码语言:javascript
运行
复制
where (column1 = @value1 or @value1 is null) and
      (column2 = @value2 or @value2 is null) and
      . . . 

此版本将参数中的NULL值视为“出于过滤目的而忽略此列”。您的版本处理列本身中的NULL值。

票数 1
EN

Stack Overflow用户

发布于 2016-08-09 19:00:32

你可以替换

代码语言:javascript
运行
复制
coalesce(column1, 0)

使用

代码语言:javascript
运行
复制
case when column1 is null then 0 else column1 end

但是,您可以设置另一个条件:

代码语言:javascript
运行
复制
(column1=@value1) OR (column1 is null AND @value1=0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38848810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档