我想在执行的各种活动中保存用户的日期和时间。到目前为止,我已经决定在数据库中使用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 as 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天之间花费了多少时间之间的差异时,希望这将成为整个应用程序中管理的噩梦。
答案 0 :(得分:1)
那你为什么需要2列呢?如果DateTime列(loginDate)的空时间为00:00:00,为什么不将该空白空间用于loginTime并且只有一列。
WHERE loginDate >= '05/23/2011' AND loginDate < '05/24/2011'
如果您打算使用整数,那么它就没有错。
答案 1 :(得分:1)
考虑到您的编辑,您理想的解决方案是将日期和时间放在同一列中,DATETIME
:
CONVERT(varchar(10), loginDate, 101)
CONVERT(varchar(10), loginDate, 108)
使用SMALLDATETIME
可能会解决存储问题,如果精度&lt;不需要1分钟。 SMALLDATETIME
每列需要四个字节,与INTEGER
相同,因此您使用两列时获得了显着的净增益。