2013-07-23 64 views
2

假設我有一個表格,其中只有工作日的記錄。我有一個外部函數返回一個DateTime(可能會在週末)。SQL - 在記錄存在的第一個日期返回記錄

如果日期落在週末,則不會有記錄,所以我想返回下一個星期一的記錄集。什麼是最簡單的方法來做到這一點?

例如:

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天還是有更簡單的方法?

回答

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

現在我看到它