SQL Server中GETDATE轉換時間時注意事項

 

在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

 

clip_image001[13]

 

 

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

 

 

clip_image002[13]

 

 

若是沒有注意這個細節問題,就會踩一些坑。僅僅是由於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

 

clip_image003[13]

相關文章
相關標籤/搜索