【发布时间】:2011-10-14 13:23:23
【问题描述】:
我想保存用户执行的各种活动的日期和时间。对于日期,我决定在数据库中使用 DateTime 列,而对于时间,我处于两难选择的数据类型中。
我知道在 sql server 2008 中引入了时间数据类型,但我使用的是旧版本,即 Sql Server 2005,所以 我需要你的建议来证明我的理解是真是假。
我见过有人使用 varchar 或 DateTime 将时间存储到数据库中。但我期待使用 Integer 数据类型。
我选择的原因是性能。
以下是我给自己的理由。
假设
任何保存到数据库中的数据都必须符合以下规则
日期将以 mm/dd/yyyy hh:MM:ss 格式存储,其中 hh:MM:ss 始终为 00:00:00 时间将以有效格式存储(从 hh:MM:ss 到 hhMMss)
if hh is 00
then MMss
and if MM is 00
then ss
and if ss is 00
then 0
hh will range in between 0-23
MM will range in between 0-59
ss will range in between 0-59
i.e. few examples
00:00:00 = 0
00:01:00 = 100
01:00:00 = 10000
13:00:00 = 130000
个人认为为什么它会表现更好。
SELECT * FROM Log WHERE loginDate = '05/23/2011'
AND loginTime BETWEEN 0 AND 235959 --Integer Comparison
当基于 DateTime 使用 JOINS 时,只考虑对 Date 部分进行连接。
在不考虑时间的情况下根据通用日期加入两个表。如果使用 DateTime 作为存储数据类型,我认为类型转换会在这种情况下产生重大影响。
由于 Sql 必须进行整数比较并且不需要进行类型转换,因此它应该表现更好。
编辑
我刚刚发现的一个缺点是,当我想得到 3 天之间花费了多少时间的两倍之间的差异时,希望它会成为在整个应用程序中管理的噩梦。
【问题讨论】:
-
如果您需要同时存储时间和日期时间,为什么不存储时间?
-
@JeremySmyth:在某些地方我们需要跟踪开始时间和结束时间,而且我仍在寻找正确和更好的方法...请提出两者的优缺点
-
当您将时间存储为 DateTime 的一部分时,您完全没有理由不能跟踪、计算和查询时间。只需使用现有字段。