2011-12-12 78 views
0

你好SOF社區:僅一天派生日期(1,2,3..31),基於當前日期

我有這樣

InvoicingActivityStartDay InvoicingActivityEndDay 
27      26 
27      26 
01      NULL --NULL MEANS LAST DAY OF MONTH 
01      NULL 
15      14  

一個表,我需要一個T-SQL在給定當前日期的情況下,將返回以上數據的查詢;如果當前日期= 12-JAN-2012,結果應該是如下

InvoicingActivityStartDATE    InvoicingActivityEndDATE 
27-DEC-2011 12:00:00.000     26-JAN-2012 23:59:99.999 
27-DEC-2011 12:00:00.000     26-JAN-2012 23:59:99.999 
01-DEC-2011 12:00:00.000     31-DEC-2011 23:59:99.999 
01-DEC-2011 12:00:00.000     31-DEC-2011 23:59:99.999 
15-DEC-2011 12:00:00.000     14-JAN-2012 23:59:99.999 

能否請你告訴我如何在單個查詢做到嗎?

請注意,如果開始日期爲1,則表示結束日始終是上個月的最後一天。

+1

是否應將開始日解釋爲上個月的那天? – GilM

+0

需要更多信息。如果第一個col = 2,你會得到Dec2-Jan2還是Jan2-Feb2?或者,什麼時候返回的範圍包括CURRENTDATE,什麼時候沒有?另外,第二列是什麼?你是否需要'通過'在下個月的第一個交易日前一天'第一個交易日',根據所提供的'第一個月的特殊規則'修改? –

+0

該表保存相對於當前日期的值。 如果發票開始日期爲1,則發票結束日期始終是本月的結束日期;如果開具發票日不是1,則明確提及結束日。 例如,今天是2011年12月13日。當我今天運行查詢時,對於Start Day = 1的行,它應該返回2011年1月1日30-NOV-2011(格式無關緊要)。 如果開始日期= 27,那麼今天運行的查詢應該返回,27-NOV-2011和26-DEC-2011 我可以使用C#擴展方法執行此操作。但只是探討它是否可以在SQL中完成。謝謝。 – FMFF

回答

2

如果我正確解釋你的要求(即開始日是上個月的那一天,並且結束日是本月的那一天;除了開始日是1時),那麼你可能需要這樣的事情(假設你的開始/結束日期是整數;如果不是,則將它們作爲整數):

SELECT DATEADD(DAY,InvoicingActivityStartDay-1, 
       DATEADD(Month,DATEDIFF(Month,0,GETDATE())-1,0)) 
     AS [InvoicingActivityStartDATE] 
     ,CASE InvoicingActivityStartDay 
     WHEN 1 THEN DATEADD(ms,-3, 
        DATEADD(Month,DATEDIFF(Month,0,GETDATE()),0)) 
     ELSE DATEADD(ms,-3, 
      DATEADD(DAY,InvoicingActivityEndDay, 
        DATEADD(Month,DATEDIFF(Month,0,GETDATE()),0))) 
     END AS [InvoicingActivityEndDATE] 
FROM t