SQL基本操作——日期函數
SQL日期:當我們處理日期時,最難的任務恐怕是確保所插入的日期的格式,與數據庫中日期列的格式相匹配。只要數據包含的只是日期部分,運行查詢就不會出問題。但是,如果涉及時間,情況就有點復雜了。在討論日期查詢的復雜性之前,我們先來看看最重要的內建日期處理函數。
SQL Server 中最重要的內建日期函數:GETDATE() 、DATEPART()、DATEADD()、DATEDIFF()、CONVERT()
1、GETDATE() 函數從 SQL Server 返回當前的時間和日期。
--基本使用 SELECT GETDATE() AS CurrentDateTime --創建帶有日期時間列 (OrderDate) 的 "Orders" 表CREATE TABLE Orders ( OrderId int NOT NULL PRIMARY KEY, ProductName varchar(50) NOT NULL, OrderDate datetime NOT NULL DEFAULT GETDATE() )
請註意,OrderDate 把 GETDATE() 規定為默認值。結果是,當您在表中插入新行時,當前日期和時間自動插入列中。現在,我們希望在 "Orders" 表中插入一條記錄:
INSERT INTO Orders (ProductName) VALUES (‘Computer‘)
結果:
OrderId | ProductName | OrderDate |
1 | Computer | 2008-12-29 16:25:46.635 |
2、DATEPART() 函數返回日期/時間的單獨部分,比如年、月、日、小時、分鐘等等。
語法:
DATEPART(datepart,date)
date 參數是合法的日期表達式。datepart 參數可以是下列的值:
假設我們有下面這個 "Orders" 表:
OrderId | ProductName | OrderDate |
1 | Computer | 2008-12-29 16:25:46.635 |
我們使用如下 SELECT 語句:
SELECT DATEPART(yyyy,OrderDate) ASOrderYear, DATEPART(mm,OrderDate) AS OrderMonth, DATEPART(dd,OrderDate) AS OrderDay FROM Orders WHERE OrderId=1
結果:
OrderYear | OrderMonth | OrderDay |
2008 | 12 | 29 |
3、DATEADD() 函數在日期中添加或減去指定的時間間隔。
語法:
DATEADD(datepart,number,date)
date 參數是合法的日期表達式。number 是您希望添加的間隔數;對於未來的時間,此數是正數,對於過去的時間,此數是負數。datepart 參數可以是上圖中的值。
我們利用上面的 "Orders" 表。現在,我們希望向 "OrderDate" 添加 2 天,這樣就可以找到付款日期。我們使用如下 SELECT 語句:
SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate FROM Orders
結果:
OrderId | OrderPayDate |
1 | 2008-12-31 16:25:46.635 |
4、DATEDIFF() 函數返回兩個日期之間的時間。
語法:
DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 參數是合法的日期表達式。datepart 參數可以是上圖中的值。使用如下 SELECT 語句:
SELECT DATEDIFF(hh,‘2008-12-29‘,‘2008-12-30‘) AS DiffDate
結果:
DiffDate |
24 |
5、CONVERT() 函數是把日期轉換為新數據類型的通用函數。具體可以看上一篇文章
參考:SQL Date 函數
SQL基本操作——日期函數