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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • MSH FINSH 对比

    MSH FINSH 对比内在的区别我也没看明白,我就把我看到的区别总结下:最明显的,msh命令都带一个__cmd_,而finsh命令不带,__cmd_这个前缀是宏定义时加的,使用FINSH_FUNCTION_EXPORT_ALIA、MSH_CMD_EXPORT这2个宏义就会把命令定义成MSH命令,官方手册也提到了,MSH执行效果FINSH执行效果finSH需要在命令后面加上(),美其名曰“C-Style”模式,MSH->exit->FINSHFINSH-&…

    2022年5月22日
  • Php控制台和phpinfo版本号不一致

    Php控制台和phpinfo版本号不一致

    2022年2月12日
  • Python3 实例–Python 计算圆的面积

    Python3 实例–Python 计算圆的面积#代码如下:#Python3实例–Python计算圆的面积print(“Python3实例–Python计算圆的面积”)#公式中r为圆的半径。r=float(input())PI=3.14s=PI*(r**2)print(“圆的面积为:{}”.format(s))#运行结果如下:Python3实例–Python计算圆的面积3圆的面积为:…

    2022年11月2日
  • 什么是PXE及PXE启动

    什么是PXE及PXE启动PXE(Pre-bootExecutionEnvironment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXEclient在网卡的ROM中,当计算机引导时,BIOS把PXEclient调入内存执行,并显示出命令菜单,经用户选择后,PXEclient将放置在远端的操作系统通过网络下载到本地运行。  PXE协议的成功运行需要解决

    2022年6月29日
  • DeepLab2:用于深度标记的TensorFlow库(2021)

    DeepLab2:ATensorFLowLibraryforDeepLabelingDeepLab2是一个用于深度标注的TensorFlow库,旨在为密集像素标注任务提供统一的、最先进的TensorFlow代码库,包括但不限于语义分割、实例分割、全景分割、深度估计,甚至视频全景分割。深度标记是指通过深度神经网络为图像中的每个像素分配预测值来解决计算机视觉问题。只要感兴趣的问题可以用这种方式表述,DeepLab2就应该达到目的。此外,此代码库包括我们最近的和最先进的深度标签研究模

    2022年4月15日
  • python endif_在Django模板中的 if else endif

    python endif_在Django模板中的 if else endifif/else{%if%}标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在{%if%}和{%endif%}之间的任何内容,例如:{%iftoday_is_weekend%}Welcometotheweekend!{%endif%}{%else%}标签是可选的:{%iftoday_is_weeke…

    2022年10月26日

发表回复

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

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