| /* T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响
 都是从老文章里收集或提炼出来的!
 提示:
 (@@Datefirst + datepart(weekday,@Date)) % 7 判断周几是最保险的! 与 @@DateFirst 无关,与语言版本无关
 @@DateFirst 可能会导致 datepart(weekday,@Date) 不一样!
 无论 @@DateFirst 等于几,无论是什么语言版本的 SQL Server 下面永远恒成立!
 (@@Datefirst + datepart(weekday,@Date))%7 : 2、3、4、5、6、0、1 分别代表 周一 到 周日
 -- */
 create function udf_GetAge(@StartDate datetime,@EndDate datetime)
 returns integer
 -- 返回精确年龄 select dbo.udf_GetAge('1949-10-01',getdate())
 begin
 return datediff(year,@StartDate,@EndDate)
 - case when datediff(day,dateadd(year,datediff(year,@StartDate,@EndDate),@StartDate),@EndDate) >= 0
 then 0
 else
 1
 end
 end
 go
 create function udf_DaysOfYearByDate(@Date datetime)
 returns integer
 -- 返回年的天数 可判断 平(365)、润(366) 年
 begin
 return datediff(day,dateadd(year,datediff(year,0,@Date),0),dateadd(year,datediff(year,0,@Date) + 1,0))
 end
 go
 create function udf_DaysOfYear(@Year integer)
 returns integer
 -- 返回年的天数 可判断 平(365)、润(366) 年
 begin
 return datediff(day,dateadd(year,@year - year(0),0),dateadd(year,@year - year(0) + 1,0))
 end
 go
 create function udf_HalfDay(@Date datetime)
 returns datetime
 -- 返回 @Date 是 上午 返回 @Date 的零点,@Date 是 下午 返回 @Date 的十二点
 begin
 return case when datepart(hour,@Date) < 12
 then dateadd(day,datediff(day,0,@Date),0) --上午归到 零点
 else
 
 |