2017-02-01 69 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) 
相關問題