提到SQL中的日期函數與時間函數就不得不說出以下兩個概念:确定性函數與非确定性函數。
确定性函數:即獲得的值是在一組既定的值中,或者是可以料想到的值。
非确定性函數:即無法準确獲知其結果。
下面将日期函數與時間函數按上面提到的這兩種類型進行分類說明:
1 . 确定性函數:
[1] DateAdd()
作用:在指定的日期加上一段時間的基礎上,傳回新的DateTime
文法:
DateAdd(datepart, number, date)
參數:
datepart
是規定應向日期的哪一部分傳回新值的參數。下表列出了 Microsoft® SQL Server™ 識别的日期部分和縮寫。
number
是用來增加datepart的值,如果指定的不是一個整數,則将舍棄此值的小數部分。
例如,如果為datepart指定day,為number指定1.75,則day将增加1。
date
是傳回DateTime類型或SmallDateTime值或日期格式字元串的表達式。
傳回值類型:
傳回DateTime,如果date參數是SmallDateTime,傳回SmallDateTime。
示例:
此示例列印出目前時間加上21天,
DateAdd(day, 21, GetDate())
number傳負數,大于本月剩餘天數的值都是可以的,函數會自己演算。
[2] DateDiff()
作用:
傳回跨兩個指定日期的日期和時間邊界數。
DateDiff(datepart, startDate, endDate)
DateAdd()中以對此參數進行了介紹,這裡不再贅述,後面的datepart參數也同。
startDate
是計算的開始日期,startDate是傳回DateTime或SmallDateTime值或日期格式字元串的表達式。
因為SmallDateTime隻精确到分鐘,是以當用SmallDateTime時,秒和毫秒總是0。
endDate
是計算的總是日期。endDate是傳回DateTime或SmallDateTime值或日期格式字元串的表達式。
int
解釋:
startDate是從endDate減去。如果startDate比endDate玩,傳回負值。
當超出整數值範圍,DateDiff産生錯誤。
對于毫秒,最大數是24天20小時31分鐘零23.647秒。
對于秒,最大數是68年。
計算跨分鐘、秒和毫秒這些邊界的方法,使得DateDiff給出的結果在全部資料類型中是一緻的。
結果是帶正負号的整數值,其等于跨第一個和第二個日期間的datepart邊界值。
例如,在1月4日(星期日)和1月11日(星期日)之間的星期數是1。
select DateDiff(day, '2009-10-24', GetDate())
[3] Day()
傳回代表指定日期的天的日期部分整數。
Day(date)
類型為DateTime或SmallDateTime的表達式。
此函數等價于DatePart(dd, date)
下面的示例從2009-10-4中傳回day部分
select Day('2009-10-4')
會得到4,即日期部分
[4] Month()
傳回代表指定日期月份的整數。
Month(date)
傳回DateTime或SmallDateTime值或日期格式字元串的表達式。
此函數等價于等價于DatePart(mm, date)
下面的示例從2009-10-4中傳回month部分
select Month('2009-10-4')
會獲得10,即月份部分
[5] Year()
傳回表示指定日期中的年份的整數。
Year(date)
DateTime或SmallDateTime類型的表達式。
此函數等價于DatePart(yy, date)
下例從日期2009-10-4中傳回年分數
select Year('2009-10-4')
獲得2009,即年份部分
2 . 非确定性函數:
[1] DateName()
傳回代表指定日期的制定日期部分的字元串。
DateName(datepart, date)
同DateAdd()
nvarchar
SQL Server自動在字元和DateTime值間按需求進行交換,例如,當字元與DateTime值進行比較時。
此示例從GetDate傳回的日期中提取月份名,
select DateName(month, GetDate())
獲得October
[2] GetDate()
按DateTime值的 Microsoft® SQL Server™ 标準内部格式傳回目前系統日期和時間。
GetDate()
DateTime
日期函數可以用在select語句的選擇清單或用在查詢的where子句中,
在設計報表時,GetDate函數可用于在每次生成報表時列印目前日期和時間。
GetDate對于跟蹤活動也很有用,諸如在記錄事務在某一賬戶上發生的時間。
A. 用GetDate傳回目前日期和日期和時間
下面的示例得出目前系統日期和時間:
select GetDate()
B. 在create table語句中使用GetDate
下面的示例建立Employees表并用GetDate給出員工雇傭時間的預設值。
use Test
go
create table Employees (
)
[3] GetUtcDate()
傳回表示目前UTC時間(世界時間坐标或稱格林威治标準時間)的DateTime值。
目前的UTC時間得自目前的本地時間和運作SQL Server的計算機作業系統中的設定。
GetUtcDate()
GetUtcDate是非确定性函數。引用該列的視圖和表達式無法進行索引。
GetUtcDate無法在使用者定義的函數内使用。
最後的這個比較特别,它是DatePart()
除了用作DatePart(dw, date)外都具有确定性。
dw是工作日的日期部分。
傳回代表指定日期的指定日期部分的函數。
DatePart(datepart, date)
這裡多了個weekday(dw),傳回對應于星期中某天的數,
例如,Sunday = 1,Saturday = 7。
weekday日期部分産生的數取決于set datefirst設定的值,此指令設定星期中的第一天。
是傳回DateTime或SmallDateTime值或日期格式字元串的表達式。
Day、Month和Year函數分别等價于DatePart(dd, date)、DatePart(mm, date)和DatePart(yy, date)
GetDate函數傳回目前日期,然而,比較時并不總是需要完整的日期資訊,通常隻是對日期的一部分進行比較。
select DatePart(mm, GetDate()) as 'Month Num'
獲得10