在SQL Server中,有时候查询数据时,须要限定查询时间范围。此时须要对时间进行运算, 以下所示:数据库
USE AdventureWorks2014;
GO
SELECT *
FROM HumanResources.Employee
WHERE ModifiedDate > GETDATE() - 20;
例如,获取前一天的时间,能够用下面这样的SQL语句。session
SELECT GETDATE() -1, GETDATE();app
至于为何写这样的SQL,一来这样书写很是简单方便,比用DATEADD函数要简便一点,另外,就是不少时候临时查数会这样写。若是对GETDATE进行加减的时间粒度为小时或分钟,那么就要特别注意了。放上两个SQL,你仔细品一品下面两个SQL的差异函数
SELECT GETDATE() -1/24, GETDATE();spa
SELECT GETDATE() -1.0/24, GETDATE();code
若是没有注意这个细节问题,就会踩一些坑。仅仅是由于SQL Server中,1/24是整数运算,计算结果为0, 必须转换为浮点数运算。虽然没有什么技术含量,可是有时候不少人不当心采坑,尤为是常常在多种类型数据库切换的人,由于像Oracle数据库又跟SQL Server不同。以下所示orm
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