欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server中GETDATE转换时间时注意事项

程序员文章站 2022-09-17 12:23:19
在SQL Server中,有时候查询数据时,需要限定查询时间范围。此时需要对时间进行运算, 如下所示: USE AdventureWorks2014;GOSELECT *FROM HumanResources.EmployeeWHERE ModifiedDate > GETDATE() - 20; ... ......

 

在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();

 

 

 

select getdate() -1.0/24, getdate();

 

 

 

 

如果没有注意这个细节问题,就会踩一些坑。仅仅是因为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