在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