本文目录列表:
 
SQL Server小时时间粒度
    
    这里说的时间粒度是指带有小时时间部分的日期时间,这个日期时间精确度是小时的。提供将带小时的日期时间和整数相互转换的功能,和以前日、周、旬、季、年那样。
 
    实现带小时的日期时间和整数相互转换的功能函数,T-SQL如下:
 IF OBJECT_ID(N'dbo.ufn_Hours', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_Hours;
END
GO --==================================
-- 功能: 获得指定的日期时间基于基准日期的总小时数(一个整数值)
-- 说明: 如果指定的日期时间为NULL或者小于基准日期“--”时,则其值默认基准日期
-- 结果值为非负整数,从0开始计数。
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SET @intHours = dbo.ufn_Hours('2008-01-14 17:45') --
--==================================
CREATE FUNCTION dbo.ufn_Hours
(
@dtmDate DATETIME
) RETURNS INT
--$Encode$--
AS
BEGIN
SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate); -- datepart参数也可以为hh
RETURN DATEDIFF(HOUR, '1900-01-01', @dtmDate)
END
GO IF OBJECT_ID(N'dbo.ufn_Hours2Date', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_Hours2Date;
END
GO --==================================
-- 功能: 获得一个整数值基于基准日期对应的日期时间
-- 说明: 如果指定的整数值为NULL或为负整数时,则其值默认为0;
-- 如果指定的整数值大于“-- ::”对应的整数值时,则其值默认设置为“-- ::”对应的整数值
-- 结果值为从基准日期开始计数的日期
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SET @dtmDate = dbo.fn_Hours2Date() -- '2008-01-14 17:00'
--==================================
CREATE FUNCTION dbo.ufn_Hours2Date
(
@intHours INT
) RETURNS DATETIME
AS
BEGIN
SET @intHours = dbo.ufn_GetValidDateNum(@intHours); DECLARE @intHoursMax AS INT;
SET @intHoursMax = dbo.ufn_Hours('9999-12-31 23:00:00'); IF @intHours >= @intHoursMax
BEGIN
SET @intHours = @intHoursMax;
END -- datepart参数也可以为hh
RETURN DATEADD(hh, @intHours, '1900-01-01')
END
GO
    测试以上功能函数的效果,T-SQL如下:
 DECLARE @dtmDate AS DATETIME;
SET @dtmDate = '2008-01-14 17:00:00'; SELECT @dtmDate AS 'The Current DateTime (Precision:Hour)'
,dbo.ufn_Hours(@dtmDate) AS 'The Total Of Hours Base-on Basedate "1900-01-01"'
,dbo.ufn_Hours2Date(dbo.ufn_Hours(@dtmDate))AS 'Hours Basedatetime Mapping';
GO
    执行后的查询结果如下图
 
SQL Server分钟时间粒度
    
    同小时时间粒度相似,这个粒度是带有分钟时间部分的日期时间,其精确度是分钟的。不过使用datediff(minute, '1900-01-01', @dtmDateTime)时,@dtmDateTime最大只能为“5983-01-24 02:07:00”,也就是datediff(minute, @starddatetime, @enddatetime)的结果值超过int的最大值(2^15 - 1),该函数就会错的。如下图所示的错误:
    实现带分钟的日期时间和整数相互转换的功能函数,T-SQL代码如下:

 IF OBJECT_ID(N'dbo.ufn_Minutes', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_Minutes;
END
GO --==================================
-- 功能: 获得指定的日期时间基于基准日期的总小时数(一个整数值)
-- 说明: 如果指定的日期时间为NULL或者小于基准日期“--”时,则其值默认基准日期
-- 结果值为非负整数,从0开始计数。
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SET @intMinutes = dbo.ufn_Minutes('2008-01-14 17:10:00');
--==================================
CREATE FUNCTION dbo.ufn_Minutes
(
@dtmDate DATETIME
) RETURNS INT
AS
BEGIN
SET @dtmDate = dbo.ufn_GetValidDate(@dtmDate); -- datepart参数也可以是mi或n
RETURN DATEDIFF(MINUTE, '1900-01-01', @dtmDate)
END
GO IF OBJECT_ID(N'dbo.ufn_Minutes2Date', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_Minutes2Date;
END
GO --==================================
-- 功能: 获得一个整数值基于基准日期对应的日期时间
-- 说明: 如果指定的整数值为NULL或为负整数时,则其值默认为0;
-- 如果指定的整数值大于“-- ::”对应的整数值时,则其值默认设置为“-- ::”对应的整数值
-- 结果值为从基准日期开始计数的日期
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SET @dtmDate = dbo.ufn_Minutes2Date() -- '2008-01-14 17:10:00'
--==================================
CREATE FUNCTION dbo.ufn_Minutes2Date
(
@intMinutes INT
) RETURNS DATETIME
AS
BEGIN
SET @intMinutes = dbo.ufn_GetValidDateNum(@intMinutes); DECLARE @intMinutesMax AS INT;
SET @intMinutesMax = dbo.ufn_Minutes('5983-01-24 02:07:00'); IF @intMinutes >= @intMinutesMax
BEGIN
SET @intMinutes = @intMinutesMax;
END -- datepart参数也可以是mi或n
RETURN DATEADD(MINUTE, @intMinutes, '1900-01-01')
END
GO
 
    测试以上功能函数的效果,T-SQL如下:
 DECLARE @dtmDate AS DATETIME;
SET @dtmDate = '2008-01-14 17:10:00';
SELECT @dtmDate AS 'The Current DateTime (Precision:Minute)'
,dbo.ufn_Minutes(@dtmDate) AS 'The Total Of Minutes Base-on Basedate "1900-01-01"'
,dbo.ufn_Minutes2Date(dbo.ufn_Minutes(@dtmDate)) AS 'Minute Basedatetime Mapping'
GO
    
    执行后的查询结果如下图
注意:分钟时间粒度仅仅提供的参考是实现,因为datediff(minute,@dtmStartDate,@dtmEndDate)返回结果值是int数据类型,受int最大值(2^15-1)的限制,建议谨慎使用。
 
总结语
 
    本文我们学习了带时间部分(小时、分钟)的日期时间和整数相互转换的功能函数,也指出了带分钟的转换为整数的限制。
参考清单列表

1、https://msdn.microsoft.com/zh-cn/library/ms186819(v=sql.90).aspx

SQL Server时间粒度系列----第5节小时、分钟时间粒度详解的更多相关文章

  1. SQL Server时间粒度系列----第4节季、年时间粒度详解

    本文目录列表: 1.SQL Server季时间粒度2.SQL Server年时间粒度 3.总结语 4.参考清单列表   SQL Serve季时间粒度       季时间粒度也即是季度时间粒度.一年每3 ...

  2. 【目录】sql server 进阶篇系列

    随笔分类 - sql server 进阶篇系列 sql server 下载安装标记 摘要: SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/ ...

  3. SQL Server调优系列基础篇

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  4. SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

    前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...

  5. SQL Server调优系列基础篇(并行运算总结篇二)

    前言 上一篇文章我们介绍了查看查询计划的并行运行方式. 本篇我们接着分析SQL Server的并行运算. 闲言少叙,直接进入本篇的正题. 技术准备 同前几篇一样,基于SQL Server2008R2版 ...

  6. SQL Server调优系列基础篇(索引运算总结)

    前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...

  7. SQL Server调优系列进阶篇(查询语句运行几个指标值监测)

    前言 上一篇我们分析了查询优化器的工作方式,其中包括:查询优化器的详细运行步骤.筛选条件分析.索引项优化等信息. 本篇我们分析在我们运行的过程中几个关键指标值的检测. 通过这些指标值来分析语句的运行问 ...

  8. SQL Server调优系列进阶篇(深入剖析统计信息)

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  9. SQL Server调优系列进阶篇(如何维护数据库索引)

    前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...

随机推荐

  1. 如何自行处理写好的eclipse插件安装不生效

    本帖最后由 anrainie 于 2013-7-23 11:31 编辑 对于eclipse插件开发的新手,经常会遇到插件写好了,拷贝到plugins或dropins文件下,但是没有生效.上网各种问,也 ...

  2. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单, ...

  3. 单一职责原则(Single Responsibility Principle)

    单一职责原则(SRP:The Single Responsibility Principle) 一个类应该有且只有一个变化的原因. There should never be more than on ...

  4. 【读书笔记】Html5游戏开发

    一直对HMTL5做游戏饶有兴趣,而这本书刚好就是HTML5 2游戏初级入门的书.Demo简单注释详细,可以拿来练练手,一个星期左右就可以读完.若要追求酷炫高大上效果,这本书恐怕要让你失望了.但作为上手 ...

  5. Golang下的Log处理

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点.相对而言,调试已经用处不大了,对于这样的项目, ...

  6. JavaScript 正则表达式上——基本语法

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  7. 搭建hadoop1.2集群

    环境准备 我使用的是vmware workstation,首先安装ubuntu 12.04,安装完成后通过vmware的clone,clone出两个虚机,设置的IP分别是: 192.168.74.13 ...

  8. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  9. atitit 短信接口规范与短信解决方案.docx

    atitit 短信接口规范与短信解决方案.docx 1.1. 国内比较著名的短信提供商1 1.2. 短信接口规范1 1.3. 短信sdk构成1 1.4. 短信的实现1 1.5. SmsServiceY ...

  10. linux下编译安装curl

    linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...