您好我想在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)
);
答案 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')
);
DATEADD
,DATEDIFF
对仅用于生成&#34;下个月的第一个&#34;和&#34;之后的第一个月#34;,使用任意(固定)日期来计算这些日期。例如。第一行计算2001年1月1日至@date
之间发生的整月数。然后将该月份添加到2001年2月1日。因此,此表达式应始终生成@date
之后的月份中的第1个月。第二对做同样的事情,但将计算出的数字加到3月1日。
您还应该注意我没有将任何函数应用于_date
,因此如果该列上恰好有一个有用的索引,它应该可用于此查询。