2009-05-01 24 views
7

如何在SQL中存儲時間或時間範圍? 它不會是一個日期時間,因爲它只是讓我們說下午4:30(不是,1月3日,下午4:30)。這些將是每週或每日會議。 我需要的查詢類型當然是用於顯示,但以後還會包含複雜的查詢,例如避免計劃中的衝突。 我寧願選擇現在最好的數據類型。SQL中一天的存儲時間

我正在使用MS SQL Server Express 2005.

謝謝!

彌敦道

回答

4

我仍然會用DateTime數據類型,而忽略日期值推薦 - 最好使用SQL(谷歌它)的靜態爲MinDate。這將爲您提供使用強類型字段的好處,唯一的成本將會是幾個額外的字節。

至於範圍,將它們存儲在兩個單獨的列。然後你可以從另一個減去一個來確定差異。

編輯:做了一些谷歌搜索。

  • SQL Server 2008添加了Time數據類型,因此您可能需要考慮這一點。
  • 您可以使用SQL 2005的日期時間類型,與CONVERT功能結合起來只提取HH:MM:SS.MMM
  • 不同的SQL版本支持不同的最短日期。你可以使用將由所有如1/1/2000支持靜態日期,或者你可以使用SQL 2005的最低值,1753年1月1日及追加時間值到startic日

所以如果你堅持2005年,選擇你的靜態日期,如1/1/2000,並存儲你的時間。所以1m:30s會是2000-1-1 00:01:30.000,1h:15m會是2000-1-1 01:15:00.000

然後你可以做Date2 - Date1並得到你的結果( 1h:15:m - 1m:30s)2000-01-01 01:13:45.000。轉換它,你會有1:13:45。

+0

請注意,以這種方式使用CONVERT將禁用任何使用日期時間列上的索引 – 2009-05-01 20:25:42

+0

有趣的是,我沒有意識到這種效果。感謝您的提示 – STW 2009-05-01 21:48:14

+0

對於未來的讀者,在使用此方法之前請檢查@tvanfosson發表的評論http://stackoverflow.com/questions/812631/store-time-of-the-day-in-sql?lq=1#comment622411_812669 – Termiux 2013-04-24 20:33:44

1

根據需要,您可以將它作爲int存儲爲24小時時間和格式。

或者其存儲爲一些固定的日期一datetime和刪除它根據需要顯示: 2000年1月1日下午4時30

我會用時間字段去,因爲它可以讓你所有的日期時間相關的電源功能。

1

您可能需要考慮將其存儲爲表示自午夜以來的分鐘數的int列。在你的實體中,你可以將它公開爲表示同一事物的TimeSpan(或int)。爲了執行查詢,您只需要在顯示值(時間格式)和數據庫值(分鐘)之間進行轉換,這可以很容易地在您的實體中完成(例如TimeSpan.TotalMinutes)。

6

就我個人而言,我會發現這是升級到2008年有一個單獨的時間數據類型的原因。

0

對我來說,這聽起來像你正在開發一種類型的會議調度程序或顯示會議的東西。

我認爲我將它設置爲2列MeetingStart和MeetingEnd,都作爲日期時間字段。這樣,您可以確定會議的長度,並且由於您已有日期,因此您可以輕鬆使用該日期將其顯示在日曆或其他內容上。