sql server 日期時間數(shù)據(jù)類型
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
![]() ![]() 1、日期和時間數(shù)據(jù)類型(1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 兩種日期時間數(shù)據(jù)類型、這兩種數(shù)據(jù)類型日期和時間是不可分割的、差異在日期范圍、精度方面 (2)sql server 2008引入date 和 time 、datetime2、datetimeoffset數(shù)據(jù)類型、其中datetime2比date范圍更大,精度更高、datetimeoffset 有一個時間偏移量組件 (3)datetime 精確到毫秒,time 和 datetime 精確到100納秒 (4)time 、datetime2 、datetimeoffset 的存儲需求取決于精度、以整數(shù) 0~7 表示秒的小數(shù)部分的精度、如TIME(0),表示小數(shù)部分為0位,精確到秒,TIME(3)表示精確到毫秒
2、日期和時間常量(1)日期和時間常量,說白了就是日期時間類型的文本值,如orderdate = '20070212' (2) Sql server將 文本‘20070212’ 識別為字符串常量、而不是日期和時間常量,但是由于 orderdate = '20070212' 涉及兩種類型的操作數(shù)、所以必須有一個隱式轉(zhuǎn)換,類型轉(zhuǎn)換的方向基于數(shù)據(jù)類型的優(yōu)先級、日期類型優(yōu)先級高于字符串 (3)此外也可以進行顯式轉(zhuǎn)換 cast('20070212' as datetime)
(4)日期格式與語言有關(guān)系,如中英文日期格式不同,sql server 將日期字符串轉(zhuǎn)換成日期時,基于會話的有效語言轉(zhuǎn)換 (5)convert(datetime, '02/12/2007' ,101)顯式轉(zhuǎn)換字符串常量,第3個參數(shù)中指定一個代表所使用格式的數(shù)字、網(wǎng)上有編碼與格式的映射表格(The Cast and Convert Functions)
3、日期篩選的優(yōu)化細節(jié)(1)使用日期函數(shù) year 、month 是無法使用索引的 -- 以下sql 無法使用到索引 select orderid ,custid ,empid ,orderdate from Sales.Orders where year(orderdate) = 2007;
(2)應該使用以下方案替代 select orderid ,custid ,empid, orderdate from Sales.Orders where orderdate>= '20070101' and orderdate < '20080101'
4、日期與事件函數(shù)4.1 返回當前日期和時間(1)getdate() , 返回datetime類型、當前日期時間 (2)current_timestamp , 等價于getdate() ,返回值是datetime ,不用帶括號,是標準ANSI SQL,推薦使用 (3) sysdatetime 返回的是datetime2
4.2指定格式字符串轉(zhuǎn)換成日期4.2.1 cast 、convert 、parse 、try_ (1)cast(value as datatype) 、convert(datetyepe,vulue,stylenumber)、parse( value as datatype using culture) (2)cast convert parse 函數(shù)當源數(shù)據(jù)無法轉(zhuǎn)換成日期會報錯,如果加了try_前綴 函數(shù)返回null ,不會報錯 (3)cast 是ANSI SQL,convert 和parse 不是,所以除非需要使用到樣式編碼或趨于編碼,盡量使用Cast (4) convert 和其他兩個參數(shù)不一樣、第一個參數(shù)是dateype ,第二步才是value, (5)convert 既可以將字符串轉(zhuǎn)時間,也可以將時間轉(zhuǎn)成指定字符串 -- 字符串轉(zhuǎn)時間 select convert(datetime, '02/12/2007' ,101) -- 時間轉(zhuǎn)字符串,一下返回當前年月日'20190406' select convert(char(8),current_timestamp,112)
4.2.2 dateadd 函數(shù)(1)該函數(shù)用于為指定日期部分增加一個指定的單位數(shù)量到輸入的日期時間值總 (2)語法 dateadd(part, n, dt_val) (3) part 的有效輸入值有 year、 quarter 、month 、week 、day 、hour 、minute、 second 、second 等,更多的參閱SQL Server 聯(lián)機叢書 -- 加一年 select dateadd(year,1,'20090212')
4.2.3 datediff函數(shù)(1) datediff 函數(shù)返回兩個日期和時間值之間在指定日期部分的差異 -- 計算一下兩個日期相差多少天,返回366天 select datediff(day,'20080212','20090212') (2)part 和前面一樣 (3)是后面的日期,減去前面的日期
4.2.4 datepart函數(shù)(1) datepart 返回一個表示所請求日期或時間值部分的整數(shù) -- 返回2 datepart(month,'20070212') (2) year(dt_val) 、month(dt_val) 、day(dt_val) 實際是datepart 的縮寫
4.2.5 isdate函數(shù)isdate(str) ,字符串能轉(zhuǎn)換成時間返回1 ,不能返回0
4.2.6 fromparts 函數(shù)(1)在sqlserver 2012 引入,用于接收各個部分的整數(shù)值構(gòu)建對應類型 (2)格式 datefromparts(year,month,day) datetimefromparts(year,month, day, minute, seconds,millisseconds)
4.2.7 eomonth(1)sqlserver 2012 中引入、用戶接受一個日期和時間值輸入,返回月末午夜日期 -- 返回當月月末日期 select eomonth(current_timestamp)
(2) 第二個參數(shù)可選,指示在原來的基礎(chǔ)上增加多少個月 --下個月的最后一天 select eomonth(current_timestamp,1)
該文章在 2025/10/14 11:03:02 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |