DATETIME 和 SMALLDATETIME 的内部存储

DATETIME 和 SMALLDATETIME 的内部存储—-DATETIME和SMALLDATETIME的内部存储与我们输入的或者显示的是完全不一样的。具体的不多说了—-看下面的演示 –1.datetime的内部存储 declare@dtdatetimeset@dt=current_timestamp  —datetime在数据库中是以8字节存储的前4个存储的是以1900-01-01为基准算出

大家好,又见面了,我是你们的朋友全栈君。

—-DATETIME SMALLDATETIME的内部存储与我们输入的或者显示的是完全不一样的。具体的不多说了

—-看下面的演示

 

–1.datetime的内部存储

 

declare @dt datetime

set @dt= current_timestamp

 

 

—datetime在数据库中是以8字节存储的前4个存储的是以1900-01-01为基准算出来的天数,后4位存储的是午夜0点之后的时钟周期数,每个时钟周期是1/300秒,即3.33毫秒。

select @dt as dt

 

/*结果

dt

———————–

2010-05-06 16:18:34.543

 

(1 行受影响)

*/

select convert(varbinary(8),@dt) as dtbinary 转化为存储的进制字符串

 

/*结果

dtbinary

——————

0x00009D6E010CC61B

*/

 

取前4位转化为天数,下面2条语句的执行结果应该是一样的

select convert(int,substring(convert(varbinary(8),@dt),1,4)) as dtday1

select datediff(day,0,@dt)  as dtday2

 

/*结果

     dtday1

———–

      40302

 

(1 行受影响)

 

     dtday2

———–

      40302

*/

取后4位转化秒数,下面2条语句的执行结果应该是一样的

select convert(int,substring(convert(varbinary(8),@dt),5,4))/300 as dts1 时钟周期数/300 为秒数

select datediff(s,convert(char(10),@dt,112),@dt)  as dts1

 

/*结果

       dts1

———–

      58714

 

(1 行受影响)

 

       dts1

———–

      58714

 

(1 行受影响)

*/

 

 

–2.smalldatetime的内部存储

 

declare @sdt smalldatetime

set @sdt= current_timestamp

 

—smalldatetime 数据类型存储天的日期和时间,但精确度低于datetime。数据库引擎将smalldatetime 值存储为两个2 字节的整数。

第一个2 字节存储1900 1 1 日后的天数。另外一个2 字节存储午夜后经过的分钟数。

select @sdt as sdt

 

/*结果

sdt

———————–

2010-05-06 16:19:00

 

(1 行受影响)

*/

 

select convert(varbinary(4),@sdt) as sdtbinary转化为存储的进制字符串

 

/*结果

sdtbinary

———-

0x9D6E03D3

 

(1 行受影响)

*/

取前2位转化为天数,下面2条语句的执行结果应该是一样的

select convert(int,substring(convert(varbinary(8),@sdt),1,2)) as sdtday1

select datediff(day,0,@sdt) as sdtday1

 

 

/*结果

    sdtday1

———–

      40302

 

(1 行受影响)

 

    sdtday1

———–

      40302

 

(1 行受影响)

*/

取后2位为分钟数,下面2条语句的执行结果应该是一样的

select convert(int,substring(convert(varbinary(8),@sdt),3,2)) as  sdtm1 午夜以后的分钟数

select datediff(mi,convert(char(10),@sdt,112),@sdt) as sdtm2

 

/*结果

      sdtm1

———–

        979

 

(1 行受影响)

 

      sdtm2

———–

        979

 

(1 行受影响)

*/

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144514.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 夜深人静学算法_写夜深人静的句子

    夜深人静学算法_写夜深人静的句子一种处理单调性问题的数据结构—单调栈

    2022年9月22日
    2
  • MybatisCodeHelperPro2.9离线激活码-激活码分享

    (MybatisCodeHelperPro2.9离线激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1PA3AFINM4-eyJsaWNlbnNlSWQi…

    2022年3月31日
    909
  • 范数对于数学的意义?1范数、2范数、无穷范数

    作者:JIWeiwei链接:https://www.zhihu.com/question/21868680/answer/25599956来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:Faaany链接:https://www.zhihu.com/question/21868680/answer/136376374来源:知乎著作权归作者所有。商业转载请联系作者…

    2022年4月6日
    73
  • idea2021永久激活码[在线序列号]

    idea2021永久激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    97
  • Java安全之反序列化回显研究

    Java安全之反序列化回显研究0x00前言续上文反序列化回显与内存马,继续来看看反序列化回显的方式。上篇文中其实是利用中间件中存储的Request和Response对象来进行回显。但并不止这么

    2021年12月13日
    67
  • finalize方法作用_Java finalize

    finalize方法作用_Java finalize关于object类中的finalize()方法。1、在object类中的源代码:protectedvoidfinalize()throwsThrowable{}2、finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。3、这个方法不需要程序员手动调用,JvM的垃圾回收器负责调用这个方法。4、finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法。5、finalize()方法实际上

    2022年9月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号