假设我有一个日期,我有下面的,顺便说一下,是SQL内置函数,我刚刚在我的数据中展示了它可能是什么。
select * from contract c
inner join payment p
on c.contract = p.contract
where DATEDIFF(MONTH, c.startDate, getdate())
<> 1
上面的工作很好,如果月份不一样,所以我做了什么,有点修复这是这个。
select * from contract c
inner join payment on p.contract= c.contract
where DATEDIFF(MONTH, c.startDate, getdate())
<> 1
and (DATEDIFF(MONTH, c.startDate, getdate())
<> 0 and DATEDIFF(year, c.startDate,
getdate() <> 0)
但是如果你注意到,我把年份和月份的检查放在括号里,但是这样做行吗?所以我想在年份和月份都是0的时候,只考虑和。
所以如果我有
| 日期|获取日期|月数|应该是|
| - -|- -|- -|- -|
| 2022年5月11日|2022年5月11日|第0页|一个|
| 2022年5月12日|2022年5月11日|一个|一个|
| 2022年5月13日|2022年5月11日|2个|2个|
| 2023年5月11日|2022年5月11日|十二|十二|
1条答案
按热度按时间bbmckpt71#
只需更改条件,排除0和1以及负值:
如果还需要考虑负值,可以编写
或
如果要按指定的月数返回差额,可以编写
但我看不出这有什么意义,因为这在逻辑上是错误的。用
DATEDIFF(MONTH, c.startDate, getdate()) + 1
来计算所有涉及的月份,包括开始月份和结束月份,会更有意义。因此,JAN到JAN将是1,JAN到FEB将是2,等等。