您好,登錄后才能下訂單哦!
DateTime存儲格式是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
什么是DateTime存儲格式
在講解DateTime存儲格式之前,需要糾正一個概念。組成DateTime類型的各個部分:year,Month,day,hour,minute,second,millisecond,不是獨立存儲。相反,DateTime作為整體,用兩個4byte整數存儲。
一個單獨的DateTime類型需要8byte存儲,前4個byte存儲1900-1-1之前或者之后的日期信息。后4個byte存儲一天內的時間信息,Datetime中的時間可以精確到1/3millisecond。DateTime類型支持的數據范圍是:1753年1月1日至9999年12月31日。為什么是1753年呢?從技術角度完全可以支持更早的日期。1753年的限制主要是從Julian到格林尼治時間的轉換。
SmallDateTime類型使用4byte類型的,前兩個byte存儲從1900年1月1日至今的日期,后兩個byte可以精確到minute存儲時間信息。SmallDateTime類型表示的數據范圍為:1900-1-1至2079-6-1。
如何使用DateTime
DateTime的使用是比較復雜的一件事情。如何正確的表示日期呢?當輸入如“2006061123:59:59:59:999”這樣一個不能精確表示的內容時,會發生什么呢?怎樣將日期和時間分開呢?接下來將會對這些問題進行討論。
1.Literals
在T-SQL中表示一個DateTime內容的輸入,是一件非常tricky(不知道怎么翻譯)的事情。在一個需要DateTime類型的Insert或者Update語句中,輸入一個字符串表示日期內容時,數據庫系統會隱式完成數據類型之間的轉換。當然,當存在多個操作數時,操作直接的優先級取決于操作數的數據類型。DateTime類型的優先級要高于String類型。當DateTime類型數據和Stirng類型數據進行比較時,String類型隱式轉換為DateTime類型。
在表示DateTime類型數據時,存在著不同的轉換,這樣增加了事情的復雜性。例如:“02/12/06”對于不同的人有不同的含義。在將此字符串轉換為DateTime類型時,SQLServer會根據會話的語言設置(langeagesettingsofsession)進行相應的轉換。會話語言取決于登陸賬者的默認語言。但此設置可以通過SetLanguage選項進行修改。我們也可以通過設置SetDate-Format選項,控制DateTime如何轉換。SetLanguage選項會隱式設置Date-Format符合語言習慣。
例(來自Microsoftmsdn):
Declare@todayvarchar(10)set@today='12/3/2007'setlanguageitalianselectdatename(month,@today)as'monthname'setlanguageus_englishselectdatename(month,@today)as'monthname'gooutput:monthname1.marzomonthname1.December
雖然,我們可以通過Set選項控制DateTime類型數據的轉換,但是,我們需要注意到,Set選項會修改整個會話的語言設置。那么,會話中依賴默認語言設置的代碼,在Setlanguage操作后,將會怎么樣呢?在國際應用中,關于這方面的考慮是非常重要的。
因此,在編寫代碼時,我盡可能的書寫不依賴系統設置和轉換的代碼。在SQLServer中,DateTime有兩種格式,不依賴于系統設置。我比較傾向于在各個日期部分之間沒有分隔符的格式,如“[yy]yymmdd[hh:mi:[ss][.mmm]]”,具體的數據如“20060312”,“060312”,“2006031223.59.59.999”等等。DateFormat和language設置不會影響此種格式的字符串。假如需要在年份,月份等之間顯示分隔符,建議使用以下格式“yyyy-mm-ddThh:mi:dd[.mmm]”,具體的數據如:“2006-03-12T14:23:05”。(注,?“yyyy-mm-ddThh:mi:dd[.mmm]”格式測試下來還是依賴語言設置,不知道是否是我做的不對.??)
除Set選項外,我們還可以使用Convert方法顯示轉換DateTime數據為不同的格式。如Convert(datetime,'12/02/2006',3).返回結果“2006-02-1200:00:00.000”.
關于DateTime存儲格式是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。