2013-01-08 23 views

回答

0

使用DATEADDDATEPART功能,這樣短的例子:

DECLARE @Date Datetime 

SET @Date = '2013.01.08 00:00:00' 

SELECT DATEADD(year, 
CASE WHEN DATEPART(month, @Date) < 4 
THEN 0 
ELSE 1 END, 
    DATEADD(day, -DATEPART(day, @Date) + 1, 
    DATEADD(month, -DATEPART(month, @Date) + 4, @Date))) 
+0

我喜歡這一點,接受它總是給我四月@Date的年份而不是以下4月份,正如我在我的問題中指定的那樣... –

+0

我改變了它,現在它應該可以正常工作,我忘了在年份中添加+ 0或+ 1 –

+0

與上面提到的問題相同 –

1

我會創造一個calendar table,那麼你可以簡單地做這樣的事情:

select 
    min([Date]) 
from 
    dbo.Calendar 
where 
    MonthNumber = 4 and 
    DayNumber = 1 and 
    [Date] > getdate() 

查詢日曆表通常比使用日期函數更清晰,更簡單,更靈活。如果今天是4月1日,你可能還想考慮會發生什麼:你想要今天的日期還是明年的?

如果你有興趣在4月1日,因爲它是一個財務年度的開始,您可以直接與信息添加到您的日曆表:

select 
    min([Date]) 
from 
    dbo.Calendar 
where 
    IsStartOfFinancialYear = 0x1 and 
    [Date] > getdate() 
+0

謝謝,我只是不想維護一個額外的表到目前爲止,但我很感激它。 –

+1

@DavidShochet個人而言,我寧願將數據保存在表格中,而不是隱藏的代碼;您對Andras解決方案的討論很好地展示了使用函數編寫和維護日期邏輯的潛在問題。但最終你知道什麼最適合你自己的環境。 – Pondlife

相關問題