2011-03-03 85 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是没有意义的:这需要采取的空间,更多的处理,更多的代码来搜索和使用

相关问题