• 处理日期和时间数据单独使用日期和时间


      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 SELECTCAST('12:30:15.123'ASDATETIME);

      该查询会生成以下输出:

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

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

  • 相关阅读:
    网站设计分析:模块化——高效重构
    linux 优化git操作速度
    cool
    跨域解决方案
    vue 登录验证引擎
    scss学习笔记
    配置动态加载模块和js分模块打包,生产环境和开发环境公共常量配置
    降低版本安装flashPlayer
    python 学习日志
    centos atomic host第一次启动
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/2701490.html
Copyright © 2020-2023  润新知