2009-08-24 107 views
5

如何避免在SQL Server中存儲datetime的時間部分,即如果我的值爲2011-01-01 00:00:00.000我只想存儲2011-01-01僅在SQL Server 2005中存儲日期

我想確保只有日期部分存儲。

回答

7

DateTime數據類型總是存儲日期和時間。因此,您只需使用CONVERT/CAST來獲取特定格式,或者根據您的需要使用YEAR(),MONTH()或DAY()方法來隔離日期詳細信息。

+0

或者你可以忽略列的時間部分,並讓它默認。只要確保只在插入/更新值時才提供日期。 – 2009-08-24 17:45:34

2

最簡單的解決方案就是不公開時間部分給用戶。但是,如果確實需要確保僅存儲日期部分,則可以在存儲該值之前將時間部分強制爲午夜/正午/任意一個固定時間。

1

內置的DATETIME數據類型存儲日期和時間數據。如果你只指定日期部分,那麼時間將是12:00:00或類似的東西。

滑稽的故事:我看到了一個數據庫,一旦那裏有一個日期和時間字段,無論是存儲日期和時間,但每次只使用了一半的數據。有些人做的愚蠢的事情:)

1

如果你投一個DateTime爲int和背部你會得到一個DateTime以00:00的一段時間。 因此,您可以將所有日期保存爲數據庫中的整數。

+0

如果您將'DateTime'投入到'INTEGER',它會將'DateTime'四捨五入到最接近的午夜。您需要首先投射到「FLOAT」然後投射到「INTEGER」。 – Quassnoi 2009-08-24 17:30:17

+0

你是對的。我一定是在中午之前試過這個(並且運行了所有的單元測試)。 – idstam 2009-08-25 10:17:35

1

無論是添加計算列:

dateonly AS CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112) 

或截斷上插入你的約會權:

INSERT 
INTO  mytable (dateonly) 
VALUES CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112) 

,使得CHECK您dateonly列,以提高一個錯誤,當有人試圖插入非截斷值:

CHECK (dateonly = CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112)) 
0

只是表示日期爲yyyMMdd整數值。