2013-02-13 9 views
4

當報告在星期一運行時,它需要將默認日期設置爲星期五?另外還有其他4個條件查看需求。如何在sql語句中做到這一點是一個問題。對於星期一,我需要將默認日期設置爲上週五的應用程序?

因此,在僞代碼,

如果今天的日期是星期一然後設置默認日期至週五全日期格式。

如果今天的日期是星期六,那麼將默認日期設置爲全日期格式的星期五。

如果今天的日期是星期日,那麼將默認日期設置爲全日制格式的星期五。

如果有其他日子,則將默認日期設置爲上一個工作日。

因此,需要一個sql語句可能與case語句。

現在我發現這些聲明給出了星期幾,所以現在需要做下一部分,這可能是一個case語句或可能是一個函數?這是我需要幫助的部分。

select datename(dw,getdate()) --Monday 
select datepart(dw,getdate()) -- 1 
+0

什麼是默認日期?表中的列? – 2013-02-13 22:33:19

+0

這是一個重複的 – vlad 2013-02-13 22:33:32

+0

對不起deafult日期只是一個日期值,將被傳遞給應用程序。 – 2013-02-13 22:54:37

回答

5
SET DATEFIRST 1; 

DECLARE @day DATE = SYSDATETIME(); 

SELECT @day = DATEADD 
(
    DAY, 
    CASE 
    WHEN DATEPART(WEEKDAY, @day) IN (1,2) 
     THEN -(DATEPART(WEEKDAY, @day)+1) 
    ELSE -1 
    END, 
    @day); 

SELECT @day; 
1

因此,如果WEEKDAY(或DW)值爲3-6(週二至週六),然後減去一天。否則,星期日減去額外的一天,星期一再加兩天。

幸運的是,星期日的值爲1,星期一的值爲2,所以您可以減去那些日子的值。

DECLARE @DefaultDate datetime 
SET @DefaultDate = 
    CASE 
     WHEN DATEPART(WEEKDAY, GETDATE()) IN (1,2) -- OR (1,7) outside the U.S. 
      THEN DATEADD(DAY, (-1 - DATEPART(WEEKDAY, GETDATE())), GETDATE())      
     ELSE 
      DATEADD(DAY, -1, GETDATE()) 
    END 
+2

*'幸運的是,週日的價值是1,星期一的價值是2'* - 好吧,那麼我爲你感到高興! :)但不是每個人都住在美國或其他地方,週日是一週的第一天。事實上,問題中的代碼樣本似乎表明OP的週一從星期一開始。 – 2013-02-13 23:56:48

+0

@AndriyM LOL。謝謝你提到! – Narnian 2013-02-14 13:12:56

相關問題