我想在datetime中存储事件,需要根据用户请求返回事件计数,如每小时,每日,每月等。
所以我想到了两个设计
tbEvents
eventDate datetime,eventId int
tbEvents
year int,month int,day int,hour int,eventId int
由于我想在不同的查询中分组(年)/(年,月)/(年,月,日),我想要一个最佳的表格设计。请帮我选择。
答案 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