MS SQL如果在12月份如何获得下个月

时间:2016-10-04 10:40:31

标签: sql sql-server sql-server-2008

您好我想在SQL server获得下个月,但如果这个月是12怎么办? 如果我有date = '2016-10-04',则下个月将为date = '2016-11-04'

我想把它放到这个查询中:

if EXISTS(
  select * from month 
  where id_Prod = @id_Prod 
  and datepart(month,DATEADD(month,1,_date)) = datepart(month,DATEADD(month,1,_date)) 
  and datepart(YEAR,_date) = datepart(YEAR,@date)
);

4 个答案:

答案 0 :(得分:2)

你可以试试dateadd

declare @dt date = getdate()

select datepart(MM,dateadd(mm,1, @dt))

答案 1 :(得分:0)

你需要检查是否

datediff(month, _date, @date) = 1

或者

datediff(month, @date, _date) = 1

你也有一个明显的混淆,其中_date在你的两个比较术语中 - 无论你想要最高的日期是在datediff中的第三个术语

请注意您的工作

datepart(month,DATEADD(month,1,_date)) = datepart(month,DATEADD(month,1,_date))

通常总是正确的 - 你的其中一个肯定是@date - 但你仍然有YEAR问题,可以通过dateiff来解决,以确定下个月是否有一个日期&#39; < / p>

这是我想尝试的事情

    if EXISTS(
            select * from month 
                where id_Prod = @id_Prod 
            and datediff(month,_date,@date) = 1 
    );

答案 2 :(得分:0)

这看起来很简单,

获取当前日期的上一个日期

SELECT DATEADD(MONTH,-1,GETDATE()) AS PrviousDate

获取当前日期的下一个日期

SELECT DATEADD(MONTH,1,GETDATE()) AS NextDate

答案 3 :(得分:0)

如果评论中给出的规范是正确的,您需要的内容如下:

if EXISTS(
  select * from month 
  where id_Prod = @id_Prod 
  and _date >= DATEADD(month,DATEDIFF(month,'20010101',@date),'20010201')
  and _date < DATEADD(month,DATEDIFF(month,'20010101',@date),'20010301')
);

DATEADDDATEDIFF对仅用于生成&#34;下个月的第一个&#34;和&#34;之后的第一个月#34;,使用任意(固定)日期来计算这些日期。例如。第一行计算2001年1月1日至@date之间发生的整月数。然后将该月份添加到2001年2月1日。因此,此表达式应始终生成@date之后的月份中的第1个月。第二对做同样的事情,但将计算出的数字加到3月1日。

您还应该注意我没有将任何函数应用于_date,因此如果该列上恰好有一个有用的索引,它应该可用于此查询。