自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

T-SQL Programming 1:DateTime Datatype part1

數(shù)據(jù)庫(kù) SQL Server
DateTime 是使用最多和出現(xiàn)問(wèn)題最多的數(shù)據(jù)類型之一。主要存在以下問(wèn)題:DateTime存儲(chǔ)格式的概念混亂;DateTime顯示格式的轉(zhuǎn)換;有關(guān)DateTime查詢問(wèn)題。

DateTime 是使用最多和出現(xiàn)問(wèn)題最多的數(shù)據(jù)類型之一。主要存在以下問(wèn)題:

  1. DateTime存儲(chǔ)格式的概念混亂。
  2. DateTime顯示格式的轉(zhuǎn)換。
  3. 有關(guān)DateTime查詢問(wèn)題。

一、DateTime存儲(chǔ)格式

在講解DateTime存儲(chǔ)格式之前,需要糾正一個(gè)概念。組成DateTime類型的各個(gè)部分:year ,Month,day,hour,minute,second,millisecond,不是獨(dú)立存儲(chǔ)。相反,DateTime作為整體,用兩個(gè)4byte整數(shù)存儲(chǔ)。

一個(gè)單獨(dú)的DateTime類型需要 8byte存儲(chǔ),前4個(gè)byte存儲(chǔ) 1900-1-1之前或者之后的日期信息。 后4個(gè)byte存儲(chǔ) 一天內(nèi)的時(shí)間信息,Datetime 中的時(shí)間可以精確到1/3 millisecond。DateTime類型支持的數(shù)據(jù)范圍是:1753年1月1日 至 9999年12月31日。為什么是1753年呢?從技術(shù)角度完全可以支持更早的日期。1753年的限制主要是從Julian到格林尼治時(shí)間的轉(zhuǎn)換。

SmallDateTime類型使用 4byte 類型的,前兩個(gè)byte存儲(chǔ)從1900年1月1日至今的日期,后兩個(gè)byte 可以精確到minute 存儲(chǔ)時(shí)間信息。SmallDateTime 類型表示的數(shù)據(jù)范圍為:1900-1-1至 2079-6-1.

二、如何使用DateTime

DateTime的使用是比較復(fù)雜的一件事情。如何正確的表示 日期呢? 當(dāng)輸入如“20060611 23:59:59:59:999”這樣一個(gè)不能精確表示的內(nèi)容時(shí),會(huì)發(fā)生什么呢?怎樣將日期和時(shí)間分開(kāi)呢?接下來(lái)將會(huì)對(duì)這些問(wèn)題進(jìn)行討論。

1.Literals

在T-SQL中表示一個(gè)DateTime內(nèi)容的輸入,是一件非常tricky(不知道怎么翻譯)的事情。在一個(gè)需要DateTime類型的Insert 或者Update語(yǔ)句中,輸入一個(gè)字符串表示日期內(nèi)容時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)隱式完成數(shù)據(jù)類型之間的轉(zhuǎn)換。當(dāng)然,當(dāng)存在多個(gè)操作數(shù)時(shí),操作直接的優(yōu)先級(jí)取決于操作數(shù)的數(shù)據(jù)類型。DateTime類型的優(yōu)先級(jí)要高于String類型。當(dāng)DateTime類型數(shù)據(jù)和Stirng類型數(shù)據(jù)進(jìn)行比較時(shí),String類型隱式轉(zhuǎn)換為DateTime類型。

在表示DateTime類型數(shù)據(jù)時(shí),存在著不同的轉(zhuǎn)換,這樣增加了事情的復(fù)雜性。例如:“02/12/06” 對(duì)于不同的人有不同的含義。在將此字符串轉(zhuǎn)換為DateTime類型時(shí),SQL Server會(huì)根據(jù) 會(huì)話的語(yǔ)言設(shè)置(langeage settings of session)進(jìn)行相應(yīng)的轉(zhuǎn)換。會(huì)話語(yǔ)言取決于登陸賬者的默認(rèn)語(yǔ)言。但此設(shè)置可以通過(guò)Set Language選項(xiàng)進(jìn)行修改。我們也可以通過(guò)設(shè)置Set Date-Format選項(xiàng),控制DateTime如何轉(zhuǎn)換。Set Language選項(xiàng)會(huì)隱式設(shè)置Date-Format 符合語(yǔ)言習(xí)慣。 

例(來(lái)自Microsoft msdn):

  1. Declare @today varchar(10)  
  2. set @today='12/3/2007' 
  3. set language italian  
  4. select datename(month,@today) as 'month name' 
  5. set language us_english  
  6. select datename(month,@today) as 'month name' 
  7. go  
  8. output :   
  9.   month name              
  10. 1.  marzo  
  11.   month name 
  12. 1.  December  
  13.  

雖然,我們可以通過(guò)Set 選項(xiàng)控制DateTime類型數(shù)據(jù)的轉(zhuǎn)換,但是,我們需要注意到,Set 選項(xiàng)會(huì)修改整個(gè)會(huì)話的語(yǔ)言設(shè)置。那么,會(huì)話中依賴默認(rèn)語(yǔ)言設(shè)置的代碼,在Set language操作后,將會(huì)怎么樣呢?在國(guó)際應(yīng)用中,關(guān)于這方面的考慮是非常重要的。

因此,在編寫(xiě)代碼時(shí),我盡可能的書(shū)寫(xiě)不依賴系統(tǒng)設(shè)置和轉(zhuǎn)換的代碼。在SQL Server中,DateTime有兩種格式,不依賴于系統(tǒng)設(shè)置。我比較傾向于在各個(gè)日期部分之間沒(méi)有分隔符的格式,如“[yy]yymmdd [hh:mi:[ss][.mmm]]”,具體的數(shù)據(jù)如“20060312” ,“060312”,“20060312 23.59.59.999”等等。DateFormat 和language設(shè)置不會(huì)影響此種格式的字符串。如果需要在年份,月份等之間顯示分隔符,建議使用以下格式“yyyy-mm-ddT hh:mi:dd[.mmm]”,具體的數(shù)據(jù)如:“2006-03-12T 14:23:05”。(注,“yyyy-mm-ddT hh:mi:dd[.mmm]”格式測(cè)試下來(lái)還是依賴語(yǔ)言設(shè)置,不知道是否是我做的不對(duì).)

除Set選項(xiàng)外,我們還可以使用Convert 方法顯示轉(zhuǎn)換 DateTime數(shù)據(jù)為不同的格式。如Convert(datetime,'12/02/2006',3).返回結(jié)果“2006-02-12 00:00:00.000”.

  原文鏈接:http://www.cnblogs.com/fisher3/archive/2011/03/27/1996815.html

責(zé)任編輯:艾婧 來(lái)源: 博客園
相關(guān)推薦

2011-04-01 16:30:26

T-SQLDateTime

2017-02-20 10:24:41

2015-03-06 17:24:56

Android應(yīng)用安全安卓應(yīng)用安全

2010-07-20 13:52:27

SQL Server

2011-10-19 10:07:16

T-SQL查詢變量

2010-10-19 16:06:26

SQL Server索

2010-07-06 10:36:35

SQL Server

2017-09-13 23:21:19

2023-08-15 08:26:34

SQL Server查找死鎖

2009-05-06 17:31:17

SQL EnlightT-SQL分析器

2010-12-06 09:26:23

SQL Server

2011-08-24 16:36:00

T-SQL

2011-02-25 14:42:10

SQLwith關(guān)鍵字

2010-07-19 13:22:45

SQL Server

2013-01-05 13:49:00

2011-03-31 09:30:27

SQL Server數(shù)管理SQL

2010-07-13 10:35:20

SQL Server2

2011-07-08 13:40:18

2022-02-14 09:24:15

SwiftUI協(xié)議

2010-06-30 14:54:42

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)