数据库表设计与datetime

时间:2011-07-26 14:51:45

标签: database-design

我想在datetime中存储事件,需要根据用户请求返回事件计数,如每小时,每日,每月等。

所以我想到了两个设计

tbEvents

eventDate datetime,eventId int

tbEvents

year int,month int,day int,hour int,eventId int

由于我想在不同的查询中分组(年)/(年,月)/(年,月,日),我想要一个最佳的表格设计。请帮我选择。

2 个答案:

答案 0 :(得分:1)

单个日期时间条目几乎肯定是正确的选择(除非您使用的是一些模糊的数据库)

你总是在查询时用内置的sql函数解析它。

答案 1 :(得分:0)

尝试以下查询

SELECT COUNT(*) FROM tbEvents where convert(varchar(4), [eventDate], 111) ='2011'  --Year
SELECT COUNT(*) FROM tbEvents where convert(varchar(7), [eventDate], 111) ='2011/07' --Year/Month
SELECT COUNT(*) FROM tbEvents where convert(varchar, [eventDate], 111) ='2011/07/24'  --Year/Month/Date

使用此网址How to format datetime & date in Sql Server 2005查看有关日期时间的好帖子

示例GROUP BY年

CREATE PROCEDURE  proc_YearEvents
AS
Begin
CREATE TABLE #EVENT (E_year varchar(4),E_month varchar(7),E_date varchar(10))
INSERT INTO #EVENT (E_year,E_month,E_date) 
SELECT convert(varchar(4), [eventDate], 111) E_year, convert(varchar(7), [eventDate], 111) E_month,convert(varchar(10), [eventDate], 111) E_date FROM [tbEvents]
SELECT E_Year,COUNT(*) from #EVENT GROUP BY E_year
END

EXEC proc_Events