本篇文章仍是學習《程序員的SQL金典》內容的記錄,這次將講解的是SQL SERVER的時間函數。程序員
本文只講SQL SERVER支持的時間函數(其它數據庫這裏就不羅列了,想看更多的能夠關注《程序員的SQL金典》)。數據庫
對於時間來說,我想基礎的東西你們仍是須要懂的,好比說,對於時間來講,有分:函數
(1)日期:表示「年-月-日」信息的數據類型,其精度精確到「日」,其中包含了年、月、日三個信息,好比「2008-08-08」。而無時間點的概念。在數據庫中,通常用Date來表示日期類型。學習
(2)時間:表示「小時:分:秒」 信息的數據類型,其精度精確到「秒」,其中包含了小時、分、秒三個信息,好比「19:00:00」。而無日期的概念。在數據庫中,通常用Time來表示時間類型。spa
(3)日期時間:表示「年-月-日 小時:分:秒」 信息的數據類型,其精度精確到「秒」,其中包含了年、月、日、小時、分、秒六個信息,好比「2008-08-08 08:00:00」。既包含了日期,也包含了時間點。在數據庫中,通常用DateTime來表示日期時間類型。code
(4)時間戳:表示比日期時間精度更高精度的時間類型。好比咱們想區分表中兩條記錄插入表中的前後順序,因爲數據庫操做速度很是快,若是用DateTime 類型記錄輸入插入時間的話,若兩條記錄插入的時間間隔很是短的話是沒法區分它們的,這時就可使用時間戳類型。數據庫中,通常用TimeStamp來表示時間戳類型。blog
不一樣的數據庫系統對日期、時間、日期時間與時間戳等數據類型的支持差別性很是大,有的數據類型在有的數據庫系統中不被支持,而有的數據類型在不一樣的數據庫系統中表示精度和其類型名稱所暗示的精度不一樣,好比Oracle 中的Date 類型中包含時間信息。數據庫中的日期時間函數對這些類型的支持差異是很是小的,所以在通常狀況下咱們將這些類型統一稱爲「日期時間類型」。three
GETDATE()函數 |
獲取得當前日期時間,返回的信息是包括了日期、時間(精確到秒之後部分)的時間戳信息。get
SELECT GETDATE() as 當前日期時間
MSSQL Server 沒有專門提供取得當前日期、取得當前時間的函數。可是經過間接的方式也能夠獲取到。主要是使用到Convert()函數。table
獲取當前日期的方式:
SELECT CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 當前日期
獲取當前日期的方式:
SELECT CONVERT(VARCHAR(50) ,GETDATE(), 108) as 當前時間
DATEADD (datepart , number, date )函數 |
用於進行日期時間的加法運算,其中datepart參數是表示日期部分的參數(好比是以日期仍是以月份相加等),number參數是具體的加數,正數表明向將來日期方向加,負數表明向過去日期方向減,date參數爲待計算的日期時間類型數據。
SELECT DATEADD(MONTH, 1, GETDATE())
SELECT FBirthDay, DATEADD (YEAR ,3,FBirthDay) as threeyrs, DATEADD(QUARTER ,20,FBirthDay) as ttqutrs, DATEADD(MONTH ,68,FBirthDay) as sxtmonths, DATEADD(WEEK, -1000,FBirthDay) as thweeik FROM T_Person
datepart參數能夠取的單位類型以下:
單位 | 別名 | 說明 |
year | yy,yyyy | 年份 |
quarter | qq,q | 季度 |
month | mm,m | 月份 |
dayofyear | dy,y | 當年度的第幾天 |
day | dd,d | 日 |
week | wk,ww | 當年度的第幾周 |
weekday | dw,w | 星期幾 |
hour | hh | 小時 |
minute | mi,n | 分 |
second | ss,s | 秒 |
millisecond | ms | 毫秒 |
DATEDIFF ( datepart , startdate , enddate )函數 |
用於計算兩個日期時間之間的差額。其中datepart參數表示日期部分的參數(好比只比較年仍是隻比較月等),startdate參數爲起始日期時間類型數據;enddate參數爲結束日期時間類型數據。
SELECT DATEDIFF(DAY, '2013/12/17 21:00:00', '2013/12/19 10:00:00')
SELECT FRegDay,FBirthDay,DATEDIFF(WEEK, FBirthDay, FRegDay) FROM T_Person
datepart參數能夠取的單位類型以下:
單位 | 別名 | 說明 |
year | yy, yyyy | 年 |
quarter | qq, q | 季度 |
month | mm, m | 月 |
dayofyear | dy, y | 工做日 |
day | dd, d | 天數 |
week | wk, ww | 周 |
Hour | hh | 小時 |
minute | mi, n | 分鐘 |
second | ss, s | 秒 |
millisecond | ms | 毫秒 |
DATENAME(datepart,date)函數 |
用來獲取一個日期的特定部分,比方只獲取年份或者是隻獲取月份等。其中datepart參數是表示要返回的日期部分的參數(即若是是Year的話,則返回的是具體的年份),date參數爲待計算日期。
SELECT FBirthDay,DATENAME(Weekday,FBirthDay), FRegDay,DATENAME(DW, FRegDay) FROM T_Person
datepart參數能夠取的單位類型以下:
單位 | 別名 | 說明 |
Year | yy、yyyy | 年份 |
Quarter | qq, q | 季度 |
Month | mm, m | 月份 |
Dayofyear | dy, y | 每一年的某一日 |
Day | dd, d | 日期 |
Week | wk, ww | 星期 |
Weekday | dw | 工做日 |
Hour | hh | 小時 |
Minute | mi, n | 分鐘 |
Second | ss, s | 秒 |
Millisecond | ms | 毫秒 |
DATEPART (datepart,date)函數 |
MSSQL SERVER提供另外一個函數也一樣能夠實現獲取日期時間特定部分。其中datepart參數是表示要返回的日期部分的參數(即若是是Year的話,則返回的是具體的年),date參數爲待計算日期。
SELECT FBirthDay, DATEPART(Dayofyear,FBirthDay), FRegDay, DATEPART(Year, FRegDay) FROM T_Person
datepart參數能夠取的單位類型以下:
單位 | 別名 | 說明 |
Year | yy、yyyy | 年份 |
Quarter | qq, q | 季度 |
Month | mm, m | 月份 |
Dayofyear | dy, y | 每一年的某一日 |
Day | dd, d | 日期 |
Week | wk, ww | 星期 |
Weekday | dw | 工做日 |
Hour | hh | 小時 |
Minute | mi, n | 分鐘 |
Second | ss, s | 秒 |
Millisecond | ms | 毫秒 |
注:DATEPART()函數的返回值是數字,而DATENAME()函數則會將盡量以名稱的方式作爲返回值。