mssql sqlserver datetime 转换 int/float数据类型的方法及原理分享


摘要:
下文主要讲述 datetime 与 int/decimal 之间的数据转换.
datetime数值存储:
整数部分存储日期同1900-1-1的差异天数;
小数部分存储为当前时间在一天24小时所占的比例数。



一、datetime 转换为 decimal 简介


根据datetime数值存储的原理,我们可以知道
日期转换为浮点数的方法:
首先将整数部分同”1900-1-1″相减得出相应的天数
然后将时间部分占用一天的比例计算出来放入小数部分。

例:

 declare @a datetime ='1900-1-1 1:00:00.001',
@b datetime ='1900-1-2 1:00:00.001'
select cast(@a as decimal(18,12)),
cast(@b as decimal(18,12))
---输出0.0416666
 select 24*0.0416666666667  ---输出1 

mssql_sqlserver_datetimToFloat

mssql_sqlserver_datetimToFloat



二、datetime 转换为 int 简介

declare @a datetime,@b datetime,@c datetime
set @a ='1900-1-1 0:00:00'
set @b ='1900-1-2 0:00:00'
set @c ='2018-3-5 13:00:01.012'
select cast(@a as int) as a,cast(@b as int) as b,
       cast(@c as int) as c 
       ---时间小数部分四舍五入转换为整数
--------输出-----------
/*
a	b	c
0	1	43163

从输出结果上,我们可以看出,日期类型转换为int类型,
将当前日期同
1900-1-1 0:00:00进行想减得出的天数,
时间部分生成占用一天时间的比例,然后四舍五入
*/
 
mssql_sqlserver_datetimToInt

mssql_sqlserver_datetimToInt