我有一个名为Product的表,它有CreatedAt(非Null,DateTime)和UpdatedAt列(Null,DateTime)。我正在尝试获取某个日期内的值。
sql语句
Select [Id], [Name] FROM [dbo].[Product] where @Date Between CreatedAt AND UpdatedAt它返回的值比我预想的要少,因为在某些记录中,UpdatedAt值为空。
我已经尝试过coalesce,并且不是null。但这并不管用。我怎么解决它呢?
发布于 2017-02-02 21:35:24
一个简单的解决方案是:
Select [Id], [Name] FROM [Product]
where
@Date Between CreatedAt AND isnull(UpdatedAt,@date)如果日期介于或等于两个间隔日期,则between运算符将返回true,因此如果为CreatedAt>@Date,则返回false,即使UpdatedAt为null且between中的上限为@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)https://stackoverflow.com/questions/41986285
复制相似问题