1 IF OBJECT_ID(N‘dbo.ufn_Hours‘, ‘FN‘) IS NOT NULL 2 BEGIN 3 DROP FUNCTION dbo.ufn_Hours; 4 END 5 GO 6 7 --================================== 8 -- 功能: 获得指定的日期时间基于基准日期的总小时数(一个整数值) 9 -- 说明: 如果指定的日期时间为NULL或者小于基准日期“1900-01-01”时,则其值默认基准日期 10 -- 结果值为非负整数,从0开始计数。 11 -- 作者: XXX 12 -- 创建: yyyy-MM-dd 13 -- 修改: yyyy-MM-dd XXX 修改内容描述 14 -- 调用: SET @intHours = dbo.ufn_Hours(‘2008-01-14 17:45‘) -- 947033 15 --================================== 16 CREATE FUNCTION dbo.ufn_Hours 17 ( 18 @dtmDate DATETIME 19 ) RETURNS INT 20 --$Encode$-- 21 AS 22 BEGIN 23 SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate); 24 25 -- datepart参数也可以为hh 26 RETURN DATEDIFF(HOUR, ‘1900-01-01‘, @dtmDate) 27 END 28 GO 29 30 IF OBJECT_ID(N‘dbo.ufn_Hours2Date‘, ‘FN‘) IS NOT NULL 31 BEGIN 32 DROP FUNCTION dbo.ufn_Hours2Date; 33 END 34 GO 35 36 --================================== 37 -- 功能: 获得一个整数值基于基准日期对应的日期时间 38 -- 说明: 如果指定的整数值为NULL或为负整数时,则其值默认为0; 39 -- 如果指定的整数值大于“9999-12-31 23:00:00”对应的整数值时,则其值默认设置为“9999-12-31 23:00:00”对应的整数值 40 -- 结果值为从基准日期开始计数的日期 41 -- 作者: XXX 42 -- 创建: yyyy-MM-dd 43 -- 修改: yyyy-MM-dd XXX 修改内容描述 44 -- 调用: SET @dtmDate = dbo.fn_Hours2Date(947033) -- ‘2008-01-14 17:00‘ 45 --================================== 46 CREATE FUNCTION dbo.ufn_Hours2Date 47 ( 48 @intHours INT 49 ) RETURNS DATETIME 50 AS 51 BEGIN 52 SET @intHours = dbo.ufn_GetValidDateNum(@intHours); 53 54 DECLARE @intHoursMax AS INT; 55 SET @intHoursMax = dbo.ufn_Hours(‘9999-12-31 23:00:00‘); 56 57 IF @intHours >= @intHoursMax 58 BEGIN 59 SET @intHours = @intHoursMax; 60 END 61 62 -- datepart参数也可以为hh 63 RETURN DATEADD(hh, @intHours, ‘1900-01-01‘) 64 END 65 GO
1 DECLARE @dtmDate AS DATETIME; 2 SET @dtmDate = ‘2008-01-14 17:00:00‘; 3 4 SELECT @dtmDate AS ‘The Current DateTime (Precision:Hour)‘ 5 ,dbo.ufn_Hours(@dtmDate) AS ‘The Total Of Hours Base-on Basedate "1900-01-01"‘ 6 ,dbo.ufn_Hours2Date(dbo.ufn_Hours(@dtmDate))AS ‘Hours Basedatetime Mapping‘; 7 GO
1 IF OBJECT_ID(N‘dbo.ufn_Minutes‘, ‘FN‘) IS NOT NULL 2 BEGIN 3 DROP FUNCTION dbo.ufn_Minutes; 4 END 5 GO 6 7 --================================== 8 -- 功能: 获得指定的日期时间基于基准日期的总小时数(一个整数值) 9 -- 说明: 如果指定的日期时间为NULL或者小于基准日期“1900-01-01”时,则其值默认基准日期 10 -- 结果值为非负整数,从0开始计数。 11 -- 作者: XXX 12 -- 创建: yyyy-MM-dd 13 -- 修改: yyyy-MM-dd XXX 修改内容描述 14 -- 调用: SET @intMinutes = dbo.ufn_Minutes(‘2008-01-14 17:10:00‘); 15 --================================== 16 CREATE FUNCTION dbo.ufn_Minutes 17 ( 18 @dtmDate DATETIME 19 ) RETURNS INT 20 AS 21 BEGIN 22 SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate); 23 24 -- datepart参数也可以是mi或n 25 RETURN DATEDIFF(MINUTE, ‘1900-01-01‘, @dtmDate) 26 END 27 GO 28 29 IF OBJECT_ID(N‘dbo.ufn_Minutes2Date‘, ‘FN‘) IS NOT NULL 30 BEGIN 31 DROP FUNCTION dbo.ufn_Minutes2Date; 32 END 33 GO 34 35 --================================== 36 -- 功能: 获得一个整数值基于基准日期对应的日期时间 37 -- 说明: 如果指定的整数值为NULL或为负整数时,则其值默认为0; 38 -- 如果指定的整数值大于“5983-01-24 02:07:00”对应的整数值时,则其值默认设置为“5983-01-24 02:07:00”对应的整数值 39 -- 结果值为从基准日期开始计数的日期 40 -- 作者: XXX 41 -- 创建: yyyy-MM-dd 42 -- 修改: yyyy-MM-dd XXX 修改内容描述 43 -- 调用: SET @dtmDate = dbo.ufn_Minutes2Date(56821990) -- ‘2008-01-14 17:10:00‘ 44 --================================== 45 CREATE FUNCTION dbo.ufn_Minutes2Date 46 ( 47 @intMinutes INT 48 ) RETURNS DATETIME 49 AS 50 BEGIN 51 SET @intMinutes = dbo.ufn_GetValidDateNum(@intMinutes); 52 53 DECLARE @intMinutesMax AS INT; 54 SET @intMinutesMax = dbo.ufn_Minutes(‘5983-01-24 02:07:00‘); 55 56 IF @intMinutes >= @intMinutesMax 57 BEGIN 58 SET @intMinutes = @intMinutesMax; 59 END 60 61 -- datepart参数也可以是mi或n 62 RETURN DATEADD(MINUTE, @intMinutes, ‘1900-01-01‘) 63 END 64 GO
1 DECLARE @dtmDate AS DATETIME; 2 SET @dtmDate = ‘2008-01-14 17:10:00‘; 3 SELECT @dtmDate AS ‘The Current DateTime (Precision:Minute)‘ 4 ,dbo.ufn_Minutes(@dtmDate) AS ‘The Total Of Minutes Base-on Basedate "1900-01-01"‘ 5 ,dbo.ufn_Minutes2Date(dbo.ufn_Minutes(@dtmDate)) AS ‘Minute Basedatetime Mapping‘ 6 GO
1、https://msdn.microsoft.com/zh-cn/library/ms186819(v=sql.90).aspx
SQL Server时间粒度系列----第5节小时、分钟时间粒度详解
原文:http://www.cnblogs.com/dzy863/p/5123989.html