zoukankan      html  css  js  c++  java
  • SQL Server中GETDATE转换时间时注意事项

     

    在SQL Server中,有时候查询数据时,需要限定查询时间范围。此时需要对时间进行运算, 如下所示:

     

    USE AdventureWorks2014;
    GO
    SELECT  *
    FROM    HumanResources.Employee
    WHERE   ModifiedDate > GETDATE() - 20;

     

     

    例如,获取前一天的时间,可以用下面这样的SQL语句。

     

        SELECT GETDATE() -1, GETDATE();

     

     

    至于为什么写这样的SQL,一来这样书写非常简单方便,比用DATEADD函数要简便一点,另外,就是很多时候临时查数会这样写。如果对GETDATE进行加减的时间粒度为小时或分钟,那么就要特别注意了。放上两个SQL,你仔细品一品下面两个SQL的差别

     

     

    SELECT GETDATE() -1/24, GETDATE();

     

    clip_image001[13]

     

     

    SELECT GETDATE() -1.0/24, GETDATE();

     

     

    clip_image002[13]

     

     

    如果没有注意这个细节问题,就会踩一些坑。仅仅是因为SQL Server中,1/24是整数运算,计算结果为0, 必须转换为浮点数运算。虽然没有什么技术含量,但是有时候很多人不小心采坑,尤其是经常在多种类型数据库切换的人,因为像Oracle数据库又跟SQL Server不一样。如下所示

     

     

     

    SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
     
    Session altered.
     
    SQL> select sysdate, sysdate -1/24 from dual;
     
    SYSDATE             SYSDATE-1/24
    ------------------- -------------------
    2020-03-28 11:32:27 2020-03-28 10:32:27
     
    SQL> 
     
    SQL> select 1/24 from dual;
     
          1/24
    ----------
    .041666667

     

    clip_image003[13]

  • 相关阅读:
    书单
    x&(x1)表达式的意义
    约瑟夫环,杀人游戏(静态循环链表实现)
    我的第一个动态规划程序(试图用递归求斐波拉契数)
    NYOJ 2题 括号配对问题
    为什么 C++不叫作++C? o(∩_∩)o
    文字常量区,字符串常量
    括号匹配(栈实现)
    Mybatis的逆向工程(generator)
    Mybatis学习一(介绍/举例/优化)
  • 原文地址:https://www.cnblogs.com/kerrycode/p/12586728.html
Copyright © 2011-2022 走看看