MS SQL如果下个月是12月,如何获取下个月

MS SQL如果下个月是12月,如何获取下个月,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,嗨,我想在SQL server中获得下个月的数据,但是如果这个月是12号呢。 当我有日期='2016-10-04'时,下个月将是日期='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 da

嗨,我想在SQL server中获得下个月的数据,但是如果这个月是12号呢。 当我有日期='2016-10-04'时,下个月将是日期='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)
);
你可以试试dateadd

declare @dt date = getdate()

select datepart(MM,dateadd(mm,1, @dt))
你需要检查一下

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-但是你仍然有年份问题,可以用datediff来确定日期是否在“下个月”

这是我要尝试的

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

这似乎很简单

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

SELECT DATEADD(MONTH,-1,GETDATE()) AS PrviousDate
获取当前日期的下一个日期

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

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

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')
);
DATEADD和DATEDIFF对只是用来生成下个月的1号和下个月的1号,使用任意的固定日期来计算它们。例如,第一行计算2001年1月1日至@date之间发生了多少整月。然后将该月数加到2001年2月1日。因此,此表达式应始终生成@date之后的月份的第一个。第二对也这样做,但将计算出的数字添加到3月1日


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

如果月份是12,该怎么办。也许你应该回答这个问题,如果这个月是12号,具体说明你想做什么。首先要弄清楚你的要求。我想应该将这个:datepartYEAR,@date替换为:datepartmonth,DATEADDYEAR,1,_date删除了MYSQL标记,因为它看起来很不相关。那么,作为输入,你有一个变量吗@date包含任意日期,并且您希望在month表中查找在@date之后的月份中出现_date列值的任何行?如果我们是在12月,我们大概应该选择明年1月的数值?谢谢,先生,但是如果月份是,那么今年的数值是多少呢12@adilzakarya-怎么了?我在计算两个日期——一个是下个月初,另一个是下个月初。这些计算总是有效的。我们不需要为今年的第十二个月做任何特殊的外壳,假定在那种情况下你想在下一年的一月找到价值。@ AdIZZAKARYA——如果这不是你想要的,你可能想考虑编辑你的问题,试图创造一个更清晰的规范。一些样本数据、预期的输入和输出会有很大帮助。