如果UpperBound列值为null怎么办?

时间:2017-02-01 17:45:36

标签: tsql

我有一个名为Product的表,其中包含CreatedAt(非空,DateTime)和UpdatedAt列(Nullable,DateTime)。 我试图获得在特定日期下降的值

sql语句

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

它返回的值少于我预期的值,因为在某些记录中,UpdatedAt值为Null。

我尝试过coalesce而不是null。但那没用。 我该如何解决?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是:

Select [Id], [Name] FROM [Product] 
where 
   @Date Between CreatedAt AND isnull(UpdatedAt,@date)

如果日期介于或等于两个间隔日期,则between运算符返回true,因此如果CreatedAt> @Date返回false,即使UpdatedAt为null且其间的上限为@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)