2013-01-04 13 views
1

我已經閱讀了這個,但仍然無法理解。希望這裏的某個人可以向我解釋。我有一個查詢只將當前日期的值賦給我的列。不過,我想知道我是否應該創建新的列DATETIMESMALLDATETIME如果我的查詢是這樣的:啓發需要清除datetime vs smalldatetime的疑問

Insert into table(col A) 
    Select DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) As ColA 
    from table B 

我想我的select語句就已經給我的日期值沒有時間。我懷疑在我的db表中創建了Col A。我正在使用Sql 2005.

更新:
所以我的qns是如何創建我的數據庫表中的列A?我是否需要爲其添加約束?哪種數據類型是首選?

+0

你需要問一個特定的和明確的問題。這是Question and Answer論壇,不是論壇。 – RBarryYoung

+0

我很抱歉,如果我不夠具體,我會做一個更新。感謝您指出 – 10e5x

+0

我添加了CHECK約束(DATEADD(DAY,DATEDIFF(DAY,0,CREATION_D),0)= CREATION_D)但是不起作用,我做錯了什麼? – 10e5x

回答

3

SQL Server 2005不支持date數據類型。那將是你真正想要的數據類型。

smalldatetimedatetime都存儲具有時間分量的日期。這些在SQL Server documentation中解釋。 Smalldatetime存儲在四個字節中,而datetime存儲在8個字節中。

出於您的目的,它們可能同樣有用。區別在於可以表示的範圍和準確性。在這兩種情況下,準確度都比一天少得多,因此可以用於大多數目的的日期存儲。

+0

好的謝謝,所以你說這兩個對我的情況同樣有用。所以它對我來說可以使用嗎?那麼我是否還需要在創建列時添加約束條件? – 10e5x

+0

如果你真的想要一個約束,說沒有時間組件,那麼你可以做到這一點。我傾向於避免約束,將檢查放在輸入而不是表上(通常使用存儲過程接口來進行插入和更新)。 –