博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
处理日期和时间数据--单独使用日期和时间
阅读量:6929 次
发布时间:2019-06-27

本文共 1248 字,大约阅读时间需要 4 分钟。

  SQL Server 2008引入了可以单独使用日期和时间部分的数据类型,但在前面的讨论中还没有区分这两部分。如果要在SQL Server 2008之前版本的SQL Server中只使用日期或时间,只能选用同时包含这两种组成部分的DATETIME或SMALLDATETIME数据类型之一。在要实现日期和时间逻辑的地方,也可以使用整数或字符串之类的数据类型,但此处暂不讨论这种用法。如果想选用DATETIME或SMALLDATETIME类型,那么当只使用日期数据时,保存数据的时间值将是午夜(时间部分全是0)。当只使用时间数据时,保存数据的日期值将是基础日期1900年1月1日。

  例如,Sales.Orders表的orderdate列是DATETIME类型的,但由于实际只使用日期部分,所以所有值的时间都存储为午夜。当需要筛选特定日期的订单时,可以不必使用范围过滤条件,只要使用如下等号运算符即可:

1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE orderdate = ' 20070212 ' ;

  当把字符串文字转换成DATETIME类型时如果没有指定时间,SQL Server将默认用午夜作为其时间值。因为orderdate列中所有值的时间部分都保存成午夜,因此以上查询能够正确地得到请求日期发出的所有订单。

  如果保存的时间不是午夜值,则可以使用范围过滤查询条件,如下所示:

1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE orderdate >= ' 20070212 ' AND orderdate < ' 20070213 ' ;

  如果想在SQL Server 2008之前的版本中只使用时间,则可以用基础日期1900年1月1日来存储所有时间值。当SQL Server把只包含时间值的字符串文字转换成DATETIME或SMALLDATETIME类型时,它会默认你想用的日期是基础日期。例如,运行以下代码:

1 SELECT CAST ( ' 12:30:15.123 ' AS DATETIME );

  该查询会生成以下输出:

  假设有个表的列叫tm,它的数据类型是DATETIME,所有值都用基础日期进行存储。要返回时间值是12:30:15.123的所有行,应该使用过滤条件WHERE tm='12:30:15.123'。因为没有指定日期部分,当SQL Server隐式地将字符串文字转换成DATETIME数据类型时,它会默认你想使用的日期是基础日期。

  如果想只使用日期或时间,但输入值既包括日期部分,也包括时间部分,这时就需要对输入值进行一定的处理,把不相关的部分暂时变成“0”。也就是说,如果只想使用日期,就把时间部分设置成午夜;如果只想使用时间,就把日期部分设置成基础日期。

转载地址:http://gtpjl.baihongyu.com/

你可能感兴趣的文章
学会说服自己
查看>>
linux下安装oracle11g
查看>>
MySQL的btree索引和hash索引的区别
查看>>
图论(四)图的拓扑排序
查看>>
jQuery几种隐藏span的方法
查看>>
KVM详解(二)
查看>>
SDWebImage的使用
查看>>
linux命令练习:基本bash脚本练习 取三个数最大值及最小值
查看>>
揭秘跨越普通权限的神秘地带
查看>>
关于黑苹果与黑苹果博客
查看>>
oralce linux启动关闭
查看>>
Web 开发之H5 Transition动画变换
查看>>
Jinja2模版文档
查看>>
Linux部署Apache ActiveMQ 5.14.3
查看>>
单例模式(Singletion)
查看>>
H5特点
查看>>
day198-2019-01-04-英语流利阅读-待学习
查看>>
Choerodon的微服务之路(一):如何迈出关键的第一步
查看>>
DelphiWebMVC 第一课 HelloWorld
查看>>
ubuntu dajngo部署静态文件
查看>>