Database design 基于datetime的数据库表设计
我想用datetime将事件存储在表中,并需要根据用户请求返回事件计数,如每小时、每天、每月等 所以我考虑两种设计 tbEvents eventDate日期时间,eventId int tbEvents 年整数、月整数、日整数、小时整数、事件ID整数Database design 基于datetime的数据库表设计,database-design,Database Design,我想用datetime将事件存储在表中,并需要根据用户请求返回事件计数,如每小时、每天、每月等 所以我考虑两种设计 tbEvents eventDate日期时间,eventId int tbEvents 年整数、月整数、日整数、小时整数、事件ID整数 由于我希望在不同的查询中按(年)/(年、月)/(年、月、日)进行分组,因此我需要一个最佳的表设计。请帮我选择。一个datetime条目几乎肯定是正确的选择(除非您在某个不知名的数据库上) 您可以在查询时始终使用内置的sql函数来解析它。尝试下面的查
由于我希望在不同的查询中按(年)/(年、月)/(年、月、日)进行分组,因此我需要一个最佳的表设计。请帮我选择。一个datetime条目几乎肯定是正确的选择(除非您在某个不知名的数据库上)
您可以在查询时始终使用内置的sql函数来解析它。尝试下面的查询
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
检查这个网址,关于Datetime的文章不错
按年份分组的示例
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
您将使用什么数据库?非常感谢您的示例。谢谢。我将在group by中使用datepart()。所以我认为这将是性能问题。