我有一个名为Product的表,其中包含CreatedAt(非空,DateTime)和UpdatedAt列(Nullable,DateTime)。 我试图获得在特定日期下降的值
sql语句
Select [Id], [Name] FROM [dbo].[Product] where @Date Between CreatedAt AND UpdatedAt
它返回的值少于我预期的值,因为在某些记录中,UpdatedAt值为Null。
我尝试过coalesce而不是null。但那没用。 我该如何解决?
答案 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)