Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 基于datetime的数据库表设计_Database Design - Fatal编程技术网

Database design 基于datetime的数据库表设计

Database design 基于datetime的数据库表设计,database-design,Database Design,我想用datetime将事件存储在表中,并需要根据用户请求返回事件计数,如每小时、每天、每月等 所以我考虑两种设计 tbEvents eventDate日期时间,eventId int tbEvents 年整数、月整数、日整数、小时整数、事件ID整数 由于我希望在不同的查询中按(年)/(年、月)/(年、月、日)进行分组,因此我需要一个最佳的表设计。请帮我选择。一个datetime条目几乎肯定是正确的选择(除非您在某个不知名的数据库上) 您可以在查询时始终使用内置的sql函数来解析它。尝试下面的查

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

所以我考虑两种设计

tbEvents

eventDate日期时间,eventId int

tbEvents

年整数、月整数、日整数、小时整数、事件ID整数


由于我希望在不同的查询中按(年)/(年、月)/(年、月、日)进行分组,因此我需要一个最佳的表设计。请帮我选择。

一个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()。所以我认为这将是性能问题。