首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果UpperBound列值为null怎么办?

如果UpperBound列值为null怎么办?
EN

Stack Overflow用户
提问于 2017-02-02 01:45:36
回答 1查看 26关注 0票数 0

我有一个名为Product的表,它有CreatedAt(非Null,DateTime)和UpdatedAt列(Null,DateTime)。我正在尝试获取某个日期内的值。

sql语句

代码语言:javascript
复制
Select [Id], [Name] FROM [dbo].[Product] where @Date Between CreatedAt AND UpdatedAt

它返回的值比我预想的要少,因为在某些记录中,UpdatedAt值为空。

我已经尝试过coalesce,并且不是null。但这并不管用。我怎么解决它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-02 21:35:24

一个简单的解决方案是:

代码语言:javascript
复制
Select [Id], [Name] FROM [Product] 
where 
   @Date Between CreatedAt AND isnull(UpdatedAt,@date)

如果日期介于或等于两个间隔日期,则between运算符将返回true,因此如果为CreatedAt>@Date,则返回false,即使UpdatedAt为null且between中的上限为@Date也是如此。

测试示例:

代码语言:javascript
复制
declare @date date = cast('20100601' as date)
;with Product as
(
select [Id], [Name] ,[CreatedAt],[UpdatedAt] 
from
(values
(1,'Product 1',cast('20100101' as date),cast('20110101' as date))
,(2,'Product 2',cast('20100101' as date),null)
,(3,'Product 3',cast('20100701' as date),null)
) a([Id], [Name] ,[CreatedAt],[UpdatedAt])
)
Select 
    [Id], [Name] FROM [Product] 
where 
    @Date Between CreatedAt AND isnull(UpdatedAt,@date)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41986285

复制
相关文章

相似问题

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