2

假设我有一个表,其中包含仅在工作日填充的记录。我有一个返回 DateTime 的外部函数(并且可能在周末)。

如果日期在周末,将没有记录,所以我想返回下周一的记录集。最简单的方法是什么?

例如:

SELECT 1 As Id, CAST('19 July 2013' AS datetime) Date INTO #DATEDATA UNION ALL --friday
SELECT 2 As Id, CAST('22 July 2013' AS datetime) --monday

DECLARE @WeekendDate DateTime = CAST('20 July 2013' AS datetime)

select 语句需要返回记录 2。

执行此操作的最简单方法是某种 while 循环,我计算记录并将日期增加 1 天,还是有更简单的方法?

4

2 回答 2

2
Select Min(Date) 
from #DATEDATA
Where Date>=@WeekendDate

或者

Select * from #DATEDATA
where Date=
(
Select Min(Date) 
from #DATEDATA
Where Date>=@WeekendDate
)
于 2013-07-23T12:31:56.337 回答
1

您还可以创建一个函数来返回所需的日期

create function dbo.mydate( @d datetime)
returns datetime
as 
begin 
  declare @day int
  set @day = datepart(dw,@d)
  return case @day 
           when 1 then dateadd(dd,1,@d) 
           when 7 then dateadd(dd,2,@d)
           else @d end
end

http://sqlfiddle.com/#!3/412dc/1

于 2013-07-23T12:51:21.827 回答