2011-03-03 84 views
1

我需要存儲日程安排日期和時間。日程安排包含一個日期字段和兩個時間字段。存儲一個日期和兩個時間字段

有沒有可能將計劃存儲在一個數據庫字段中而不是兩個(日期時間+日期時間)?

我正在使用SQL Server 2005.

謝謝!

回答

1

爲什麼你想要在一個字段而不是兩個有效地存儲兩個日期時間?有沒有時間表可能有跨越日子的時間? (即01/03/2011 23:59,02/03/2011 01:35)?你不介意解析出這些信息,而不是立即準備好查詢嗎?

如果你真的想要,沒有理由不能將它存儲爲字符串類型,逗號可能分開,也許XML建議,但我不能說這是建議的日期/時間字段更節省空間,用於搜索的目的很好且快速/靈活,並且有許多有用的T-SQL函數可以很容易地用於日期/時間類型,這些日期/時間類型很難在沒有解析和轉換的情況下用於字符串。

如果你能想出一個不使用兩個日期時間字段的好理由,我會有另一個甜甜圈! (週四快樂發福)。

一個快速和可怕的邪惡的想法...你可以使用日期時間的一部分來存儲「差異」......將其潛入「秒」和「毫秒」值,並將其應用於主日期/獲得新價值的時間。有點怪異,但它可以做到這一點,取決於你的範圍要求。

-- Example: 01/03/2011 12:30:02 
-- Translates into - first of March 2011, 12:30 to 14:30 (12:30 + (seconds * hours)) 

set @ModifiedDatetime = 
    DATEADD(hour, DATEPART(second, @originalDateTime), @originalDateTime); 

小心四捨五入的誤差,並且毫秒......請考慮你正在做什麼的後果。每當有人濫用類型時,上帝會殺死一隻小貓:)

1

您可以嘗試使用XML字段類型和存儲在那裏的XML片段,類似以下內容:

<schedule date="2011-01-01" fromTime="12:00" toTime="14:00" /> 

然後,您可以使用XQuery在選擇轉換結果集返回到「正常「基於行的結果集。實現XQuery的一個示例查詢,根據我的例子中的XML模式,可能如下:

SELECT 
    [...] 
    , Schedule.value('(/schedule/@date)[1]','datetime') as [Date] 
    , Schedule.value('(/schedule/@fromTime)[1]','char(5)') as [FromTime] 
    , Schedule.value('(/schedule/@toTime)[1]','char(5)') as [ToTime] 
FROM [TABLE] 

我不是說把它作爲XML是做到這一點的最佳方式(如其他答案理所當然狀態) ,但你問如果這是可能的,我提出了一個解決方案...

+0

這裏的理由聽起來scarily相似的人在見義勇爲熱線工作的交換機。 「嗯,他確實要求一個絞索...」:) :) – 2011-03-03 13:08:42

+0

嘿,我絕對喜歡XML,所以當有人問一個問題時,我會用XML回答它(如果可能的話):P公平地說, SQ中的XML數據類型L服務器不是那麼邪惡...... – FarligOpptreden 2011-03-03 13:10:45

+0

我當然不會否認它可以是有用的,但我會說這是可以被濫用和輕易濫用的強大解決方案之一......這可能是一個例子可能......也許......我會看,看看會發生什麼:) – 2011-03-03 13:16:44

2

無論是「開始」+「停止」還是「開始」+「」持續時間「,您都有2條信息=存儲2條信息。

使用字符串或XML是沒有意義的:這需要採取的空間,更多的處理,更多的代碼來搜索和使用

相關問題