如何在SQL Server 2008中计算所需的日期?

如何在SQL Server 2008中计算所需的日期?,sql,sql-server-2008,Sql,Sql Server 2008,需要检查今天的日期是否20,则将结果var设置为下个月的下个月1号 例如: 对于2015年9月24日将结果设置为2015年11月1日 对于2015年9月19日将结果设置为2015年10月1日 由于日期算法的原因,这似乎有点棘手: set @var = (case when day(getdate()) < 20 then cast(dateadd(month, 1, dateadd(day, 1 - day(getdate()), getdate()))

需要检查今天的日期是否<20,然后将结果变量设置为下个月的1号。 如果今天的日期>20,则将结果var设置为下个月的下个月1号

例如:

  • 对于
    2015年9月24日
    将结果设置为
    2015年11月1日
  • 对于
    2015年9月19日
    将结果设置为
    2015年10月1日

    • 由于日期算法的原因,这似乎有点棘手:

      set @var = (case when day(getdate()) < 20
                       then cast(dateadd(month, 1, dateadd(day, 1 - day(getdate()), getdate())) as date)
                       else cast(dateadd(month, 2, dateadd(day, 1 - day(getdate()), getdate())) as date)
                  end);
      
      set@var=(日期(getdate())<20时的大小写)
      然后将dateadd(月,1,dateadd(天,1-day(getdate()),getdate())转换为日期)
      else cast(dateadd(月,2,dateadd(天,1-day(getdate()),getdate())作为日期)
      (完),;
      

      是显示计算结果的SQL小提琴。

      这将为您提供结果:

      DECLARE @d DATE = '20150924'
      SELECT CASE WHEN DAY(@d) < 20 
                  THEN DATEADD(mm, 1, DATEADD(dd, -DAY(@d) + 1, @d)) 
                  ELSE DATEADD(mm, 2, DATEADD(dd, -DAY(@d) + 1, @d)) END;
      
      DECLARE@d DATE='20150924'
      当日(@d)<20时选择案例
      然后DATEADD(mm,1,DATEADD(dd,-DAY(@d)+1,@d))
      其他日期添加(mm,2,DATEADD(dd,-DAY(@d)+1,@d))结束;
      
      我不知道为什么会投反对票,这是一个完全合理(但有点困难)的问题。糟糕的措辞可能是语言障碍的问题。谢谢。这正是我想要的。