1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 6 CREATE FUNCTION [dbo].[GetAge] 7 ( 8 @birthday datetime, --出生日期 9 @visitdate datetime 10 ) 11 RETURNS nvarchar(10) 12 AS 13 BEGIN 14 -- Declare the return variable here 15 declare @age int --年齡 16 declare @unit nvarchar(10) --單位 17 declare @result nvarchar(20) --總結果 18 SET @age = 0; 19 SET @result='0'; 20 if(@visitdate is null) 21 begin 22 set @visitdate = GETDATE(); 23 end 24 25 IF(@birthday > GETDATE()) 26 BEGIN 27 SET @birthday = GETDATE(); 28 END 29 30 31 32 --1天以內:X小時[X分鐘] 33 34 --2.1天至1月以內:X天[X小時] 35 36 --3.1月至1歲以內:X月[X天] 37 38 --4.1歲至兒童年齡上限:X歲[X月] 39 40 --5.>=兒童年齡上限:X歲 41 42 --說明:1天以內,是指按出生日期24小時算 43 44 --1月以內,是指對天計算 45 46 --比如:7.8日出生,8.8日才算1月 47 48 --1歲以內,也是對天計算 49 50 --“以內”都是指“<” 51 52 -- 兒童上限:12歲 53 54 --------------------------12歲以上開始------------------------------------------------- 55 -->=12 顯示歲 56 IF(datediff(month,@birthday, @visitdate) >= 144) 57 BEGIN 58 --如果當前月份>=出生時的月份,取正常歲數 59 IF(DATEPART(MONTH,@visitdate) >= DATEPART(MONTH,@birthday)) 60 BEGIN 61 --如果當前日期>=出生時的日期,取正常歲數 62 IF(DATEPART(DAY,@visitdate) >= DATEPART(DAY,@birthday)) 63 BEGIN 64 --SET @age = datediff(year, @birthday,@visitdate); 65 --SET @unit = '歲'; 66 SET @result=CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)) + '歲'; 67 END 68 ELSE 69 --否則需要減一歲 70 BEGIN 71 --SET @age = datediff(year, @birthday,@visitdate)-1; 72 --SET @unit = '歲'; 73 SET @result=CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)-1) + '歲'; 74 END 75 END 76 ELSE 77 --得出的歲數要-1 78 BEGIN 79 SET @age = datediff(year, @birthday,@visitdate)-1; 80 SET @unit = '歲'; 81 SET @result=CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)-1) + '歲'; 82 END 83 END 84 --------------------------12歲以上結束------------------------------------------------- 85 --------------------------1-12歲開始------------------------------------------------- 86 87 ELSE IF(datediff(month,@birthday, @visitdate) >= 12 and datediff(month,@birthday, @visitdate) < 144) 88 BEGIN 89 --如果當前月份>=出生時的月份,取正常歲數 90 IF(DATEPART(MONTH,@visitdate) >= DATEPART(MONTH,@birthday)) 91 BEGIN 92 --如果當前日期>=出生時的日期,取正常月數 93 IF(DATEPART(DAY,@visitdate) >= DATEPART(DAY,@birthday)) 94 BEGIN 95 SET @result =CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate))+'歲'+CONVERT(VARCHAR(10),(DATEPART(MONTH,@visitdate) - DATEPART(MONTH,@birthday)))+'月'; 96 97 END 98 ELSE 99 --得出的月數-1 100 BEGIN 101 --SET @result = CONVERT(VARCHAR(10),datediff(year, @birthday,@visitdate))+'歲'+CONVERT(VARCHAR(10),datediff(month,@birthday, @visitdate)%12)+'月'; 102 SET @result = CONVERT(VARCHAR(10),datediff(year, @birthday,@visitdate))+'歲'+CONVERT(VARCHAR(10),datediff(month,@birthday, @visitdate)%12)+'月'; 103 END 104 105 END 106 ELSE 107 --得出的歲數要-1 108 BEGIN 109 --如果當前日期>=出生時的日期,取正常月數 110 IF(DATEPART(DAY,@visitdate) >= DATEPART(DAY,@birthday)) 111 BEGIN 112 --SET @result =CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)-1)+'歲'+CONVERT(VARCHAR(10),(DATEPART(MONTH,@visitdate) - DATEPART(MONTH,@birthday)))+'月'; 113 SET @result =CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)-1)+'歲'+CONVERT(VARCHAR(10),datediff(month,@birthday, @visitdate)%12)+'月'; 114 115 116 END 117 ELSE 118 --得出的月數-1 119 BEGIN 120 SET @result =CONVERT(VARCHAR(10), datediff(year, @birthday,@visitdate)-1)+'歲'+CONVERT(VARCHAR(10),datediff(month,@birthday, @visitdate)%12)+'月'; 121 122 END 123 END 124 END 125 --------------------------1-12歲結束------------------------------------------------- 126 127 128 129 --------------------------1個月-1歲 開始------------------------------------------------- 130 --ELSE IF(datediff(month,@birthday, @visitdate)< 12 and(( DATEPART(DAY,@visitdate) < DATEPART(DAY,@birthday) and (DATEPART(MONTH,@visitdate) -DATEPART(MONTH,@birthday))>1) or DATEPART(DAY,@visitdate) >=DATEPART(DAY,@birthday) and (DATEPART(MONTH,@visitdate) -DATEPART(MONTH,@birthday))=1)) 131 ELSE IF((datediff(month,@birthday, @visitdate)< 12) and (datediff(month,@birthday, @visitdate)> 1 or datediff(month,@birthday, @visitdate)= 1 and DATEPART(DAY,@visitdate) >= DATEPART(DAY,@birthday))) 132 BEGIN 133 ------若出生日期的月份<=當前日期的月份:不跨年,直接相減 134 --若出生日期的day=<當前日期的Day,直接是月份相減,天數相減 135 IF(DATEPART(DAY,@visitdate) >= DATEPART(DAY,@birthday)) 136 BEGIN 137 138 SET @result =CONVERT(VARCHAR(10), datediff(month, @birthday,@visitdate))+'月'+CONVERT(varchar(10),DAY(@visitdate)-DAY(@birthday))+'天'; 139 END 140 141 --若出生日期的day>當前日期的Day,直接是月份相減-1,天數(出生日期的月份天數-出生當天的天數+當前時間的天數) 142 ELSE 143 BEGIN 144 SET @result =CONVERT(VARCHAR(10), datediff(month, @birthday,@visitdate)-1)+'月'+CONVERT(VARCHAR(10), (CONVERT(VARCHAR(10),DAY(@visitdate))+DAY( DATEADD(month,1,@birthday)-DAY(@birthday))-DAY(@birthday)))+'天'; 145 END 146 147 END 148 149 150 151 152 --------------------------1個月-1歲 結束------------------------------------------------- 153 154 --------------------------1天至1月以內 開始------------------------------------------------- 155 --如果當前日期Day>出生日期的Day,并且當前日期月份-出生日期的月份=0 或者 如果當前日期Day<出生日期的Day,并且當前日期月份-出生日期的月份=1 表示一個月以內 156 IF((datediff(month,@birthday, @visitdate)=1 and DATEPART(DAY,@visitdate) < DATEPART(DAY,@birthday)) or (DATEPART(month,@visitdate) - DATEPART(month,@birthday)=0 and DATEPART(DAY,@visitdate) > DATEPART(DAY,@birthday))) 157 BEGIN 158 SET @result=CONVERT(VARCHAR(10), (datediff(MINUTE,@birthday, @visitdate))/60/24)+'天'+CONVERT(VARCHAR(10), (datediff(MINUTE,@birthday, @visitdate))/60%24)+'小時'; 159 160 END 161 --------------------------1天至1月以內 結束------------------------------------------------- 162 163 --------------------------1天以內 開始------------------------------------------------- 164 IF(datediff(HOUR,@birthday, @visitdate)< 24 ) 165 BEGIN 166 167 SET @result= CONVERT(VARCHAR(10), datediff(SECOND,@birthday, @visitdate)/60/60)+'小時'+CONVERT(VARCHAR(10), datediff(SECOND,@birthday, @visitdate)/60%60)+'分鐘'; 168 END 169 --------------------------1天以內 結束------------------------------------------------- 170 171 IF (@age < 0) 172 BEGIN 173 SET @age = 0; 174 SET @unit = '歲'; 175 END 176 177 --return (CONVERT(VARCHAR(10), @age) + @unit) 178 return @result; 179 180 END
浙公網安備 33010602011771號