366天解决问题:
declare @st_date date = '2318-01-01';
declare @end_date date = '2417-12-31';
select datepart(yyyy,dateadd(year,(year(@st_date))%4+((year(@st_date)+100)%400/100)*100,cast(0 as datetime)) + datediff(day,@st_date,@end_date) ) -
(1900+(year(@st_date))%4+(((year(@st_date)+100)%400/100)*100)) as year
,datepart(mm,dateadd(year,(year(@st_date))%4+((year(@st_date)+100)%400/100)*100,cast(0 as datetime)) + datediff(day,@st_date,@end_date) ) - 1 as month
,datepart(dd,dateadd(year,(year(@st_date))%4+((year(@st_date)+100)%400/100)*100,cast(0 as datetime)) + datediff(day,@st_date,@end_date) ) - 1 as day
输出 99 year 11 month 30 day
总月:
select (datepart(yyyy,dateadd(year,(year(@st_date))%4+((year(@st_date)+100)%400/100)*100,cast(0 as datetime)) +
datediff(day,@st_date,@end_date) ) - (1900+(year(@st_date))%4+(((year(@st_date)+100)%400/100)*100))) * 12 +
datepart(mm,dateadd(year,(year(@st_date))%4+((year(@st_date)+100)%400/100)*100,cast(0 as datetime)) +
datediff(day,@st_date,@end_date) ) - 1 as totalmonth
输出 1199 totalmonth