SQL Server时间粒度系列----第6节基于当前日的小时数和分钟数与mysql unix_timestamp和from_unixtime的mssql实现
2016-01-13 12:55
886 查看
本文目录列表:
1、基于当前日的小时数和分钟数
2、mysql unix_timestamp和from_unixtime的mssql实现
3、总结语
4、参考清单列表
基于当前日的小时数和分钟数
平时工作中遇到过一天内个时间段的用户登录情况的需求,也有针对每个小时内的分钟段内的用户的活跃度的需求,很多类似的需求都是针对更小时间刻度比如小时、分钟来进行数据分析的。针对这样类似的需求提供获取指定日期时间的基于所在当前日午夜零时的小时数或分钟数的功能函数。
提供基于当前日的小时数和分钟数的功能函数,T-SQL代码如下:
测试以上功能函数的效果,T-SQL代码如下:
执行后的查询结果如下图:
mysql unix_timestamp和from_unixtime的mssql实现
在mysql中,有一对unix_timestamp和from_unixtime的一对函数,将带有小时分钟表的日期时间和整数实现相互转换,基于“1970-01-01"这个UTC基准日期的。之前处理过将mysql的数据建议到mssql时,迁移过来的mysql的数据中有关日期时间的全部是8字节整数保存的,当时的处理方案没有在源数据增加此整数对应的日期时间的字段列,而是在mssql中将这个整数转换为日期时间,所以将mysql中unix_timestamp和from_unixtime的功能在mssql中实现。
MSSQL实现的针对功能函数,T-SQL代码如下:
测试以上功能函数的效果,T-SQL代码如下:
执行后的查询结果如下图:
总结语
本文简单提供了获取指定的日期时间基于所在当前日的小时数和分钟数的功能函数,也提供了类似mysql unixtimestamp和from_unixtime针对功能函数的mssql实现。
参考清单列表
1、https://msdn.microsoft.com/zh-cn/library/ms174420(v=sql.90).aspx
2、基于mysql unix_timestamp和from_unixtime的mssql实现参考了网上的实现方案,具体的参考网页忘记啦,如有博友指出我在加上。
1、基于当前日的小时数和分钟数
2、mysql unix_timestamp和from_unixtime的mssql实现
3、总结语
4、参考清单列表
基于当前日的小时数和分钟数
平时工作中遇到过一天内个时间段的用户登录情况的需求,也有针对每个小时内的分钟段内的用户的活跃度的需求,很多类似的需求都是针对更小时间刻度比如小时、分钟来进行数据分析的。针对这样类似的需求提供获取指定日期时间的基于所在当前日午夜零时的小时数或分钟数的功能函数。
提供基于当前日的小时数和分钟数的功能函数,T-SQL代码如下:
IF OBJECT_ID(N'dbo.ufn_HoursOfDay', 'FN') IS NOT NULL BEGIN DROP FUNCTION dbo.ufn_HoursOfDay; END GO --================================== -- 功能: 获取指定的日期日期基于所在当期日午夜零时的小时数 -- 作者: 结果值从0开始计数,包括0、1、2、……、23 -- 作者: XXX -- 创建: yyyy-MM-dd -- 修改: yyyy-MM-dd XXX 修改内容描述 -- 调用: SET @tintHoursOfDay = dbo.ufn_HoursOfDay(GETDATE()); --================================== CREATE FUNCTION dbo.ufn_HoursOfDay ( @dtmDate DATETIME -- 指定的日期时间 ) RETURNS TINYINT AS BEGIN RETURN DATEPART(HOUR, @dtmDate); END GO IF OBJECT_ID(N'dbo.ufn_MinutesOfDay', 'FN') IS NOT NULL BEGIN DROP FUNCTION dbo.ufn_MinutesOfDay; END GO --================================== -- 功能: 获取指定的日期时间基于所在当前日午夜零时的分钟数 -- 作者: 结果值从0开始计数,包括0、1、2、3、1439 -- 作者: XXX -- 创建: yyyy-MM-dd -- 修改: yyyy-MM-dd XXX 修改内容描述 -- 调用: SET @sintMinutesOfDay = dbo.fn_MinutesOfDay(GETDATE()); --================================== CREATE FUNCTION dbo.ufn_MinutesOfDay ( @dtmDate DATETIME -- 指定的日期时间 ) RETURNS SMALLINT AS BEGIN RETURN DATEPART(HOUR, @dtmDate) * 60 + DATEPART(MINUTE,@dtmDate); END GO
测试以上功能函数的效果,T-SQL代码如下:
DECLARE @dtmDateTime AS DATETIME; SET @dtmDateTime = '2017-01-13 00:00:00' SELECT @dtmDateTime AS 'The Current DateTime' ,dbo.ufn_HoursOfDay(@dtmDateTime) AS 'HoursOfDay' ,dbo.ufn_MinutesOfDay(@dtmDateTime) AS 'MinutesOfDay'; SET @dtmDateTime = '2017-01-13 12:01:00' SELECT @dtmDateTime AS 'The Current DateTime' ,dbo.ufn_HoursOfDay(@dtmDateTime) AS 'HoursOfDay' ,dbo.ufn_MinutesOfDay(@dtmDateTime) AS 'MinutesOfDay'; SET @dtmDateTime = '2017-01-13 23:59:00' SELECT @dtmDateTime AS 'The Current DateTime' ,dbo.ufn_HoursOfDay(@dtmDateTime) AS 'HoursOfDay' ,dbo.ufn_MinutesOfDay(@dtmDateTime) AS 'MinutesOfDay'; GO
执行后的查询结果如下图:
mysql unix_timestamp和from_unixtime的mssql实现
在mysql中,有一对unix_timestamp和from_unixtime的一对函数,将带有小时分钟表的日期时间和整数实现相互转换,基于“1970-01-01"这个UTC基准日期的。之前处理过将mysql的数据建议到mssql时,迁移过来的mysql的数据中有关日期时间的全部是8字节整数保存的,当时的处理方案没有在源数据增加此整数对应的日期时间的字段列,而是在mssql中将这个整数转换为日期时间,所以将mysql中unix_timestamp和from_unixtime的功能在mssql中实现。
MSSQL实现的针对功能函数,T-SQL代码如下:
IF OBJECT_ID(N'dbo.ufn_UnixTimestamp', 'FN') IS NOT NULL BEGIN DROP FUNCTION dbo.ufn_UnixTimestamp; END GO --================================== -- 功能: 获取UnixTimestamp(unix日期时间戳) -- 说明: 结果值从0开始计数,基于 -- 作者: XXX -- 创建: yyyy-MM-dd -- 修改: yyyy-MM-dd XXX 修改内容描述 -- 调用: SELECT dbo.ufn_UnixTimestamp(GETDATE()); --================================== CREATE FUNCTION dbo.ufn_UnixTimestamp ( @dtmDateTime DATETIME -- 指定的日期时间 ) RETURNS BIGINT --$Encode$-- AS BEGIN DECLARE @dtmUnixBasedate AS DATETIME; SET @dtmUnixBasedate = '1970-01-01'; DECLARE @tintCurrentTimeZone AS TINYINT; SET @tintCurrentTimeZone = 8; IF @dtmDateTime IS NULL OR @dtmDateTime < DATEADD(HOUR, @tintCurrentTimeZone, @dtmUnixBasedate) BEGIN RETURN 0; END SET @dtmDateTime = CONVERT(DATETIME, CONVERT(VARCHAR(23), @dtmDateTime, 120)); RETURN DATEDIFF(SECOND, @dtmUnixBasedate, DATEADD(HOUR, -1*@tintCurrentTimeZone, @dtmDateTime)); END GO IF OBJECT_ID(N'dbo.ufn_FromUnixTimestamp', 'FN') IS NOT NULL BEGIN DROP FUNCTION dbo.ufn_FromUnixTimestamp; END GO --================================== -- 功能: 获取UnixTimestamp(unix日期时间戳) -- 说明: 具体实现阐述 -- 作者: XXX -- 创建: yyyy-MM-dd -- 修改: yyyy-MM-dd XXX 修改内容描述 -- 调用: SELECT dbo.ufn_FromUnixTimestamp(2); --================================== CREATE FUNCTION dbo.ufn_FromUnixTimestamp ( @bintUnixTimestamp BIGINT -- 指定的整数 ) RETURNS DATETIME --$Encode$-- AS BEGIN DECLARE @dtmUnixBasedate AS DATETIME; SET @dtmUnixBasedate = '1970-01-01'; DECLARE @tintCurrentTimeZone AS TINYINT; SET @tintCurrentTimeZone = 8; IF @bintUnixTimestamp >= 1 BEGIN RETURN DATEADD(HOUR, @tintCurrentTimeZone, DATEADD(SECOND, @bintUnixTimestamp, @dtmUnixBasedate)) END RETURN @dtmUnixBasedate; END GO
测试以上功能函数的效果,T-SQL代码如下:
DECLARE @dtmDateTime AS DATETIME; SET @dtmDateTime = '1970-01-01'; SELECT @dtmDateTime AS 'The Current DateTime' ,dbo.ufn_UnixTimestamp(@dtmDateTime) AS 'Bigint Value Base-on"1970-01-01"' ,dbo.ufn_FromUnixTimestamp(dbo.ufn_UnixTimestamp(@dtmDateTime)) AS 'The DateTime Mapping'; SET @dtmDateTime = '2016-01-11'; SELECT @dtmDateTime AS 'The Current DateTime' ,dbo.ufn_UnixTimestamp(@dtmDateTime) AS 'Bigint Value Base-on"1970-01-01"' ,dbo.ufn_FromUnixTimestamp(dbo.ufn_UnixTimestamp(@dtmDateTime)) AS 'The DateTime Mapping'; GO
执行后的查询结果如下图:
总结语
本文简单提供了获取指定的日期时间基于所在当前日的小时数和分钟数的功能函数,也提供了类似mysql unixtimestamp和from_unixtime针对功能函数的mssql实现。
参考清单列表
1、https://msdn.microsoft.com/zh-cn/library/ms174420(v=sql.90).aspx
2、基于mysql unix_timestamp和from_unixtime的mssql实现参考了网上的实现方案,具体的参考网页忘记啦,如有博友指出我在加上。
相关文章推荐
- mysql连接权限问题 Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
- 阿里云RDS导入mysql数据库
- mysql数据库锁机制
- MySQL不支持中文、将编码修改为utf-8,仍不支持中文问题解决方案
- mysql显示行号
- MySQL DATE_FORMAT() 函数
- mysql kettle 分页
- mysql 常用命令集锦
- mysql查询锁表信息
- 创建Mysql 序列
- 最全mysql sql语句大全
- mysql select日期格式
- 1--mysql学习笔记--基本操作
- Mysql索引详解
- mysql 事务
- MySql 语句优化
- Mysql各种存储引擎的特性以及如何选择存储引擎
- Ubuntu 14.04 下安装mysql 5.7.10
- 再说MySQL数据库事务隔离级别的那些事(通俗版非学院派)
- mysql数据库中外键的用法