2017-05-04 138 views
0

考虑三个独立的日期字段:之间有2个日期

COMPLETION_DATE:2017年4月27日 DUE_DATE:2016年7月22日 LATEST_DATE:2018年7月20日

使用DATEDIFF(MM,DUE_DATE ,LATEST_DATE),我可以计算结果为24

然后我需要能够搞清楚(月),其中竣工日期落在这个范围之内。结果应该是21

+0

哎呀,其结果应该是21而不是19 –

+0

那你试试?你得到了什么错误? –

+0

我还没有尝试比第一个公式的任何其他。我无法弄清楚如何进行第二部分。 –

回答

0

我想你算错了结果,或提供的日期时出现了拼写错误。如果completion_date2018-04-27,而不是你在你的问题有2017-04-27,那么结果将是21

create table t (completion_date date, due_date date, latest_date date); 
insert into t values ('20180427','20160722','20180720'); 

select 
    completion_date = convert(char(7),completion_date) 
    , due_date = convert(char(7),due_date) 
    , latest_date = convert(char(7),latest_date) 
    , months_for_completion = datediff(month,due_date,latest_date) 
    , months_until_completion = datediff(month,due_date,completion_date) 
    , months_remaining_at_completion = datediff(month,completion_date,latest_date) 
from t 

rextester演示:http://rextester.com/DEV75985

回报:

+-----------------+----------+-------------+-----------------------+-------------------------+--------------------------------+ 
| completion_date | due_date | latest_date | months_for_completion | months_until_completion | months_remaining_at_completion | 
+-----------------+----------+-------------+-----------------------+-------------------------+--------------------------------+ 
| 2018-04   | 2016-07 | 2018-07  |     24 |      21 |        3 | 
+-----------------+----------+-------------+-----------------------+-------------------------+--------------------------------+ 
+0

完成编号的剩余月份是正确的。给我提供价值的人给了我不正确的信息。去搞清楚。 –

+0

@LisaRose乐意帮忙! – SqlZim