Sql server 2008 比较日期范围
数据: 对于以上数据,我有两个活动活动在一个接一个地运行。 对于给定的日期(rundate),我需要从@DatesTable中选择一个适用@rundate的有效活动 基本上,要查看的结束日期取决于下一个活动的开始日期,并确定@rundate对哪个活动有效并返回该结果Sql server 2008 比较日期范围,sql-server-2008,datetime,Sql Server 2008,Datetime,数据: 对于以上数据,我有两个活动活动在一个接一个地运行。 对于给定的日期(rundate),我需要从@DatesTable中选择一个适用@rundate的有效活动 基本上,要查看的结束日期取决于下一个活动的开始日期,并确定@rundate对哪个活动有效并返回该结果 如果没有返回结果,则需要返回上一个活动。如果所有内容都声明为date,而不是datetime,则您将有一个更轻松的时间(无CAST)。无论如何,试一下: DECLARE @rundate datetime = GETDATE()
如果没有返回结果,则需要返回上一个活动。如果所有内容都声明为
date
,而不是datetime
,则您将有一个更轻松的时间(无CAST
)。无论如何,试一下:
DECLARE @rundate datetime = GETDATE()
DECLARE @DatesTable TABLE (name varchar(200),STARTDATE datetime,ENDDATE datetime)
INSERT INTO @DatesTable VALUES('campaign1',GETDATE(),GETDATE()+10)
INSERT INTO @DatesTable
VALUES('campaign2',GETDATE()+11,GETDATE()+13)
;具有
cte AS
(
选择名称、开始日期、结束日期、,
rn=行号()结束(订单按结束日期描述)
来自@DatesTable
WHERE CAST(STARTDATE AS date)您的所有列都是datetime
。我们是否应该忽略时间组件?是-如果您需要知道表@DatesTable中记录的活动是否在特定日期(放在@rundate变量中)运行,则时间始终为00:00:00.000?
;WITH
cte AS
(
SELECT name, STARTDATE, ENDDATE,
rn = ROW_NUMBER() OVER (ORDER BY ENDDATE DESC)
FROM @DatesTable
WHERE CAST(STARTDATE AS date) <= CAST(@rundate AS date)
)
SELECT *
FROM cte
WHERE rn = 1