存储时间和星期几

时间:2012-06-04 18:31:26

标签: sql-server database database-design

挑战: 我有一个要求,我必须实施定期事件。我存储的是星期几,时间以及事件将再次发生的日期范围。

可能的解决方案: 以字符串和枚举的形式存储时间和星期几。 存储当前时间并设置当天的时间和日期?

问题: 存储时间和星期几的最佳做法是什么?

EDT:我正在使用SQL Server数据库

2 个答案:

答案 0 :(得分:2)

这种最佳方法可能取决于您使用的数据库。但是,有两种一般方法,都非常合理。

第一种是以数据库的本机格式存储日期和时间。大多数数据库具有从日期时间类型中提取星期几和时间的功能。您可以使用这些函数编写查询。通常,您将这些存储为一个字段,但有时您可能希望将日期和时间部分分开。

第二个是拥有一个日历表。日历表将日期或日期ID作为键,然后包含您想要了解的内容的列。星期几将是一个明显的专栏。

在某些情况下,日历表是首选解决方案。例如,如果您要将您的应用程序国际化,那么从表格中获取一周中的某一天可以更容易地获得字符串英语,希腊语,中文,俄语,斯瓦希里语或任何您喜欢的语言。或者,如果您想跟踪特定假期,那么日历表也可以存储此信息。或者,如果您的业务运行在一个奇怪的财务日历上(例如5-4-4),那么日历表是一个不错的选择。

在任何一种情况下,您都不需要在表中存储冗余日期信息。您应该从内置函数或通过在引用表中查找所需内容来派生它。

答案 1 :(得分:2)

另一种方法是让计算列代表你所追求的部分。

CREATE TABLE dbo.foo
(
  bar DATETIME,
  bar_day_of_week AS DATEPART(WEEKDAY, bar),
  bar_time AS CONVERT(TIME, bar)
);

INSERT dbo.foo(bar) SELECT GETDATE();

SELECT bar, bar_day_of_week, bar_time FROM dbo.foo;