2015-07-04 84 views
2

我正在使用SQL Server 2008 R2。在SQL Server中使用時間(0)和日期時間2(0)

使用SQL Server Management Studio,我創建了一個數據庫和一個新表。

在表中,我有2列,數據類型爲Time(0)Datetime2(0)

enter image description here

我插入一條記錄在此表的值:

12:50:34...........2015-02-02 12:50:34 

但是,當這個記錄被保存,值如下圖所示:

12:50:34...........2015-02-02 12:50:34.0000000 

這是SQl服務器管理工​​作室內的圖像: enter image description here

因此,Time(0)列的值保留,因爲我輸入。但Datetime2(0)列的值在末尾有0。

爲什麼DateTime2(0)列的值發生變化?

+0

這可能是SSMS中的一個錯誤。如果你執行'SELECT * FRON tab',它應該返回'DATETIME2(0)'而不用納秒:'2015-02-02- 12:50:34'。 –

+0

好吧,但哪個是正確的:查詢還是SSMS?爲什麼? – alex

回答

0

Datetime2(0)表示分數精度爲0

我覺得當SQL Server存儲在類型datetime2一個日期,然後讀取該數據,認爲它有一個datetime2 7精度爲毫秒,然後將其截斷爲n0在這種情況下:

對於例如:

DECLARE @d1 datetime2 = CAST('1968-10-23 12:45:37.1237' AS datetime2(0)) 
     @d2 datetime(0) = '1968-10-23 12:45:37.1237'; 

SELECT @d1, @d2; 

結果將是

1968-10-23 12:45:37.0000000  1968-10-23 12:45:37 

這(結果)爲time(0)是一樣的:

DECLARE @t1 time = CAST('1968-10-23 12:45:37.1237' AS datetime2(0)), 
    @t2 time(0) = '1968-10-23 12:45:37.1237'; 

SELECT @t1, @t2 

所以,當您使用datetime(0)time(0)類型的列的行爲是一樣的:

DECLARE @t table(dt2 datetime2(0), t time(0)); 

INSERT INTO @t VALUES ('1968-10-23 12:45:37.1237', '1968-10-23 12:45:37.1237'); 

SELECT * FROM @t; 

結果是:

dt2     t 
1968-10-23 12:45:37 12:45:37 
+0

我的問題是爲什麼在時間(0)的情況下,額外的0末尾沒有添加,但在DateTime2(0)這些0結束了嗎?我有兩個值的時間沒有毫秒的情況。 – alex

+0

@alex正如我測試並添加到'time(0)'和'datetime2(0)'的答案結果是相同的,沒有任何尾隨'0';)。 –

+0

@ shA.t請看看我更新的問題上的圖片。此圖片使用以下內容生成:編輯頂部200行。 – alex