SQL server计算两个日期相多少月,多少日。

 1 CREATE FUNCTION [dbo].[_GetDateInterval]
 2 (
 3  @d1 as datetime,
 4  @d2 as datetime
 5 )
 6 RETURNS nvarchar(100)
 7 AS
 8 BEGIN
 9  --函数默认@d1 <= @d2,如果@d1 > @d2,则交换
10  If @d1 > @d2
11  Begin
12   Declare @d3 as datetime
13   Set @d3 = @d1
14   Set @d1 = @d2
15   Set @d2 = @d3 
16  End
17  
18  declare @yy as int, @mm as int, @dd as int
19  
20  --先直接判断月数,每年的12个月是固定的
21  set @mm = DATEDIFF(MONTH, @d1, @d2)
22  
23  --当@d1的日大于@d2+1的日(不到1个月),则月份-1
24  If Day(@d1) > Day(@d2) + 1
25  Begin 
26   Set @mm = @mm - 1
27  End
28  
29  --将@d1日期直接增加已获得的月数,以便后面直接判断天数
30  set @d1 = DATEADD(MONTH, @mm, @d1)
31  
32  --根据@mm,获取年数
33  set @yy = @mm / 12
34  
35  --根据@mm,将@mm取余数,获取月数
36  set @mm = @mm % 12
37  
38  --获取@dd的天数,此时的@d1已经是接近@d2日期了
39  set @dd = DATEDIFF(DAY, @d1, @d2) + 1
40  
41  --将@d1日期增加1个月,并减去1天,判断是否与@d2相同(满月判断)
42  set @d1 = DATEADD(MONTH, 1, @d1)
43  set @d1 = DATEADD(DAY, -1, @d1)
44  
45  --如果相同,则表示天数进位(满月),日期进位,月份+1
46  If @d1 = @d2
47  Begin
48   Set @mm = @mm + 1
49   Set @dd = 0
50  End
51  
52  --最后也是判断月数是否有进位。判断@mm是否为12(逢12进1),如果是则年份+1,即@yy+1,然后@mm设为0
53  If @mm = 12
54  Begin
55   Set @yy = @yy+1
56   Set @mm = 0
57  End
58  
59  Declare @str as nvarchar(100) 
60 
61  set @str= cast(@yy*12+@mm as varchar(10))+','+cast(@dd as varchar(10))
62  
63  return @str
64 END
65 
66 
67 GO

 

posted @ 2021-03-16 09:13  奶油拌云朵  阅读(626)  评论(0编辑  收藏  举报