您如何在SQL中存储时间或时间范围? 它不会是一个日期时间,因为它只是让我们说下午4:30(不是1月3日下午4:30)。 那些是每周或每日会议。 我需要的查询类型当然是用于显示,但稍后还将包括复杂查询,例如避免计划中的冲突。 我现在宁愿选择最好的数据类型。
我正在使用MS SQL Server Express 2005。
谢谢!
森
答案 0 :(得分:6)
我个人认为这是升级到具有单独时间数据类型的2008的原因。
答案 1 :(得分:4)
我建议仍然使用DateTime数据类型并忽略日期值 - 理想情况下使用静态MinDate for SQL(Google it)。这将为您提供使用强类型字段的好处,唯一的成本将是一些额外的字节。
对于范围,请将它们存储在两个单独的列中。然后你可以从另一个中减去一个来确定差异。
编辑:做了一些谷歌搜索。
因此,如果您坚持使用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。
答案 2 :(得分:1)
您可以将其作为int存储为24小时,并根据需要进行格式化。
或者将其存储为具有固定日期的日期时间,并根据需要将其删除以进行显示: 2000年1月1日下午4:30
我会使用datetime字段,因为它为您提供了所有与日期时间相关的功能。
答案 3 :(得分:1)
您可能需要考虑将其存储为表示自午夜以来的分钟数的int列。在您的实体中,您可以将其公开为表示相同内容的TimeSpan(或int)。您只需要在显示值(时间格式)和数据库值(分钟)之间进行转换,以便执行查询,这可以在您的实体中轻松完成(例如,TimeSpan.TotalMinutes)。
答案 4 :(得分:0)
对我来说,这听起来像是在开发一种会议日程安排程序或其他东西来显示会议。
我认为我会将它设置为2列MeetingStart和MeetingEnd,两者都作为datetime字段。通过这种方式,您可以确定会议的长度,并且由于您已经拥有日期,因此可以轻松地将其用于在日历或其他内容上显示。