在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