Sql server 如何在SQL Server中选择下一个四月的开始?

Sql server 如何在SQL Server中选择下一个四月的开始?,sql-server,Sql Server,您能帮我选择一个日期,它是下一个月的开始,例如四月吗? 例如,如果是2013年1月8日,则应选择2013年4月1日;如果是2013年6月8日,则应选择2014年4月1日 谢谢。使用DATEADD和DATEPART功能,如以下简短示例: DECLARE @Date Datetime SET @Date = '2013.01.08 00:00:00' SELECT DATEADD(year, CASE WHEN DATEPART(month, @Date) < 4 THEN 0 EL

您能帮我选择一个日期,它是下一个月的开始,例如四月吗? 例如,如果是2013年1月8日,则应选择2013年4月1日;如果是2013年6月8日,则应选择2014年4月1日


谢谢。

使用
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)))
DECLARE@Date-Datetime
设置日期='2013.01.08 00:00:00'
选择日期添加(年,
DATEPART(月,@Date)<4时的情况
然后0
否则1结束,
DATEADD(天,-DATEPART(天,@Date)+1,
DATEADD(月、-DATEPART(月、@Date)+4、@Date)))
我将创建一个,然后您可以简单地执行以下操作:

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()

我喜欢这样,接受它总是给我@Date年的4月,而不是我在问题中指定的次年4月…我更改了它,现在它应该可以正常工作了,我忘了给年添加+0或+1与上述相同的问题,请重试,2013.01.08它给我2013.04.01 2013.07.08它给我2014.04.01。谢谢,到目前为止,我只是不想维护一个额外的表,但我很感激。@DavidShochet我个人更愿意维护表中的数据,而不是神秘的代码;您对Andras解决方案的讨论很好地说明了使用函数编写和维护日期逻辑的潜在问题。然而,最终你最清楚什么最适合你自己的环境。