2017-02-01 23 views
0

我有表称为产品,它具有CreatedAt(非空,日期时间)和UpdatedAt列(可空,日期时间)。 我想获得它在特定日期如果UpperBound列值为空,该怎么办?

SQL语句

Select [Id], [Name] FROM [dbo].[Product] where @Date Between CreatedAt AND UpdatedAt 

比我预料的,因为在某些记载,UpdatedAt值为null,则返回值少在值。

我试过coalesce并且不是null。但那并不奏效。 我该如何解决它?

+1

其中@date CreatedAt和ISNULL(UpdatedAt,'12 /9999分之31' )..或任何日期远在你想要的未来之间。 – Jeremy

回答

1

一个简单的解决办法是:如果日期为之间或等于两个间隔日期

运营商之间
Select [Id], [Name] FROM [Product] 
where 
    @Date Between CreatedAt AND isnull(UpdatedAt,@date) 

的返回true,所以如果CreatedAt> @date返回假,则即使当UpdatedAt为空而这两者之间的上限将是@Date。

测试例如:

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) 
相关问题