數據類型 | 存儲(字節) |
日期范圍 | 精確度 | 格式示例 |
DateTime | 8 | 1753年1月1日 - 9999年12月31日 | 3 1/3毫秒 | yyyy-MM-dd hh:mm:ss.nnn |
smalldatetime | 4 | 1900年1月1日 - 2079年6月6日 | 1分鍾 | yyyy-MM-dd hh:mm |
date | 3 | 0001年1月1日 - 9999月12月31日 | 1天 | yyyy-MM-dd |
time | 3-5 | N/A | 100納秒 | hh:mm:ss.nnnnnnn |
DateTime2 | 6-8 | 0001年1月1日 - 9999年12月31日 | 100納秒 | yyyy-MM-dd hh:mm:ss.nnnnnnn |
Datetimeoffset | 8-10 | 0001年1月1日 -- 9999年12月31日 | 100納秒 | yyyy-MM-dd hh:mm:ss.nnnnnnn |
-- 1、時間和日期函數 除了CURRENT_TIMESTAMP 函數不置頂小括號"()";其他的函數都需要制定小括號
select GETDATE() --返回當前時間
select CURRENT_TIMESTAMP -- 等同於getdate(),但是遵循ANSI SQL
select GETUTCDATE() -- 返回UTC日期和時間(協調世界時 )
select SYSDATETIME() -- 當前日期和時間
select SYSUTCDATETIME() -- 當前UTC日期和時間(協調世界時)
select SYSDATETIMEOFFSET() -- 包含時區偏移量的當前日期時間
-- 2、cast、convert函數,及其Try_對應函數 TRY_函數在SQL Sever2012開始支持
-- cast、convert函數用於將輸入值轉換為目標類型,如果轉換成功輸出轉換的值,否則報錯;
-- try_cast、try_convert函數;兩個個try_函數與其對應的函數功能作用一樣,不同的是如果不能講輸入的值轉換為指定類型,函數返回NULL.
select CAST('20160628' AS DATE)
select TRY_CAST('20160628' AS DATE)
select CAST('123456' as DATE)
select Try_CAST('123456' as DATE)
select CONVERT(char(10),GETDATE(),120)
select Try_CONVERT(char(10),GETDATE(),120)
select CONVERT(int,'123acb')
select Try_CONVERT(int,'123acb')
-- 3、switchoffset函數將輸入的datetimeoffset時間調整為指定的時區時間
select switchoffset(sysdatetimeoffset(),'-05:00') --查詢-05:00 時區時間
select SWITCHOFFSET(SYSDATETIMEOFFSET(),'+00:00') --查詢UTC時間
-- 4、Todatetimeoffset函數;設置輸入的日期和時間值得時區偏移量
select TODATETIMEOFFSET(SYSDATETIMEOFFSET(),-10)
-- 5、DateAdd函數;允許為指定的日期部分增加一個指定的單位的單位數量到輸入的日期和時間值中。
select DATEADD(YEAR,1,'2016-06-28') --指定日期加1年 2017-06-28
select DATEADD(QUARTER,1,'2016-06-28') --指定日期加3個月206-09-28
select DATEADD(MONTH,-1,'2016-06-28') --指定日期減1個月2016-05-28
select DATEADD(DAY,1,'2016-06-28') --指定日期加1天2016-06-29
select DATEADD(WEEK,1,'2016-06-28') --指定日期加7天2016-07-05
select DATEADD(HOUR,1,'2016-06-28 21:00:00.000') -- 指定時間加1小時 2016-06-28 22:00:00.000
select DATEADD(MINUTE,1,'2016-06-28 21:00:00.000') -- 指定時間加1分鍾 2016-06-28 21:01:00.000
select DATEADD(SECOND,1,'2016-06-28 21:00:00.000') -- 指定時間加1秒鍾 2016-06-28 21:00:01.000
select DATEADD(MILLISECOND,10,'2016-06-28 21:00:00.000') --指定時間加10毫秒 2016-06-28 21:00:00.010
-- 6、DateDiff(part,val1,val2)函數;返回val2-val1返回指定單位的數量
select DateDiff(YEAR,'2011-06-28','2017-06-28')
select DateDiff(QUARTER,'2016-03-28','2016-06-28')
select DateDiff(MONTH,'2016-05-28','2016-06-28')
select DateDiff(DAY,'2016-06-27','2016-06-28')
select DateDiff(WEEK,'2016-06-21','2016-06-28')
select DateDiff(HOUR,'2016-06-28 20:00:00.000','2016-06-28 21:00:00.000')
select DateDiff(MINUTE,'2016-06-28 21:01:00.000','2016-06-28 21:00:00.000')
select DateDiff(SECOND,'2016-06-28 21:00:01.000','2016-06-28 21:00:00.000')
select DateDiff(MILLISECOND,'2016-06-28 21:00:00.001','2016-06-28 21:00:00.000')
-- 7、datepart函數;返回一個日期或時間部分的整數部分;
select DATEPART(YEAR,'2016-06-28')
select DATEPART(MONTH,'2016-06-28')
select DATEPART(WEEK,'2016-06-28')
select DATEPART(DAY,'2016-06-28')
select DATEPART(HOUR,'2016-06-28 21:01:02')
select DATEPART(MINUTE,'2016-06-28 21:01:02')
select DATEPART(SECOND,'2016-06-28 21:01:02')
select DATEPART(MILLISECOND,'2016-06-28 21:01:02:100')
-- 8、year、month和day函數;和datepart函數一樣;返回年、月、日期的整數
select YEAR('2016-06-28')
select month('2016-06-28')
select day('2016-06-28')
-- 9、datename函數;與datepart類似;但是返回的不是數字而是名稱,根據操作系統的語言返回指定的日期名稱;例如英文操作系統中 DATENAME(MONTH,'2016-06-28') 返回june
select DATENAME(year,'2016-06-28')
select DATENAME(MONTH,'2016-06-28')
select DATENAME(DAY,'2016-06-28')
select DATENAME(HOUR,'2016-06-28 21:01:02')
select DATENAME(MINUTE,'2016-06-28 21:01:02')
select DATENAME(SECOND,'2016-06-28 21:01:02')
select DATENAME(MILLISECOND,'2016-06-28 21:01:02:100')
-- 10、isdate函數;判斷輸入的字符串是否能轉換為日期或時間;true 為1;false為0
select ISDATE('2016-06-28') --true
select ISDATE('2016-06-282') --false
select ISDATE('2016-06-28 21:00:00.000') --true
select ISDATE('2016-06-28 21:00:00.0000') --false