請您幫我選擇一個日期,這是某個特定的下個月的開始日期,例如四月? 例如,如果是2013年1月8日,則應選擇2013年4月1日,但如果是2013年6月8日,則應選擇2014年4月1日。如何在SQL Server中選擇以下四月的開始?
謝謝。
請您幫我選擇一個日期,這是某個特定的下個月的開始日期,例如四月? 例如,如果是2013年1月8日,則應選擇2013年4月1日,但如果是2013年6月8日,則應選擇2014年4月1日。如何在SQL Server中選擇以下四月的開始?
謝謝。
使用DATEADD
和DATEPART
功能,這樣短的例子:
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)))
我會創造一個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()
謝謝,我只是不想維護一個額外的表到目前爲止,但我很感激它。 –
@DavidShochet個人而言,我寧願將數據保存在表格中,而不是隱藏的代碼;您對Andras解決方案的討論很好地展示了使用函數編寫和維護日期邏輯的潛在問題。但最終你知道什麼最適合你自己的環境。 – Pondlife
我喜歡這一點,接受它總是給我四月@Date的年份而不是以下4月份,正如我在我的問題中指定的那樣... –
我改變了它,現在它應該可以正常工作,我忘了在年份中添加+ 0或+ 1 –
與上面提到的問題相同 –