当前位置:  开发笔记 > 编程语言 > 正文

在数据库中存储时间(hh:mm)的最佳方法

如何解决《在数据库中存储时间(hh:mm)的最佳方法》经验,为你挑选了4个好方法。

我想将时间存储在数据库表中,但只需要存储小时和分钟.我知道我可以使用DATETIME并忽略日期的其他组件,但是如果不存储比我实际需要的更多信息,最好的方法是什么?



1> BigJump..:

您可以将其存储为午夜过后分钟数的整数:

例如.

0 = 00:00 
60 = 01:00
252 = 04:12

但是,您需要编写一些代码来重新构建时间,但这不应该是棘手的.


在那里,完成了...... mins = dd%60和小时= dd/60 ont就可以了.
然后使用DATEADD()来获取实时.即便是小也足够了.
一个小缺点是数据库缺乏可读性
这是一个伟大,简单和直接的想法.+1

2> WebMatrix..:

如果您使用的是SQL Server 2008+,请考虑TIME数据类型.SQLTeam文章包含更多用法示例.



3> Knickerless-..:

DATETIME开始DATETIME结束

我恳请您使用两个DATETIME值,标记为event_startevent_end.

时间是一项复杂的业务

世界上大多数人现在已经采用基于denery的度量系统进行大多数测量,无论是对还是错.总的来说这是好的,因为至少我们都同意ag,是ml,是立方厘米.至少差不多.公制系统存在许多缺陷,但至少它在国际上一直存在缺陷.

然而,随着时间的推移,我们有 一秒钟内1000毫秒,60分钟到一分钟,60分钟到一小时,每半天12小时,每月大约30天,根据月份甚至年份的不同而不同,每个国家的时间与其他国家相比有所不同,每个国家的时间格式各不相同.

消化很多,但是这种复杂场景的长短不可能有一个简单的解决方案.

有些角落可以被削减,但有些角落可以不被削减

虽然这里的最佳答案表明你在午夜过后存储整数分钟看似完全合理,但我已经学会了避免这么做.

实现两个DATETIME值的原因是为了提高准确度,分辨率和反馈.

当设计产生不良结果时,这些都非常方便.

我存储的数据多于要求的数据吗?

最初可能看起来存储的信息比我要求的要多,但是有充分的理由采取这种方式.

存储这些额外的信息几乎总是最终节省了我长时间的时间和精力,因为我不可避免地发现,当某人被告知事情花了多长时间时,他们还想知道事件发生的时间和地点.

这是一个巨大的星球

在过去,我一直无视这个星球上除了我自己以外的其他国家.这在当时似乎是一个好主意,但这总是导致问题,头痛和后来的浪费时间.始终考虑所有时区.

C#

DateTime很好地呈现给C#中的字符串.ToString(字符串格式)方法紧凑且易于阅读.

例如

new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")

SQL服务器

此外,如果您正在将数据库分别读取到您的应用程序界面,那么dateTimes很容易一目了然地阅读,并且对它们执行计算非常简单.

例如

SELECT DATEDIFF(MINUTE, event_start, event_end)

ISO8601日期standards

如果使用SQLite,那么你没有这个,所以改为使用Text字段并以ISO8601格式存储它,例如.

"2013-01-27T12:30:00 + 0000"

笔记:

这使用24小时制*

ISO8601的+0000部分直接映射到GPS坐标中的晶格.因此,值得考虑是否值得存储经度,纬度和高度以及数据.这在应用上会有所不同.

ISO8601是一种国际格式.

维基非常适合http://en.wikipedia.org/wiki/ISO_8601的详细信息.

日期和时间以国际时间存储,并根据世界存储时间的位置记录偏移量.

根据我的经验,总是需要存储完整的日期和时间,无论我是否认为我开始项目的时间.ISO8601是一种非常好的,未来的方法.

免费提供额外建议

同样值得将事件组合在一起就像一个链条.例如,如果记录比赛,整个事件可以按racer,race_circuit,circuit_checkpoints和circuit_laps分组.

根据我的经验,识别存储记录的人也是明智之举.作为通过触发器填充的单独表格或作为原始表格中的附加列.

你投入的越多,你就越多

我完全理解尽可能节省空间的愿望,但我很少会以丢失信息为代价.

对数据库的经验法则如标题所述,数据库只能告诉您数据的数据,并且回顾历史数据,填补空白可能成本非常高.

解决方案是第一次让它正确.这说起来容易做起来难,但您现在应该对有效的数据库设计有更深入的了解,并且随后第一次就能更好地完成它.

初始设计越好,后期维修的成本就越低.

我只说这一切,因为如果我能及时回去,那就是当我到达那里时我会告诉自己的.



4> Seth..:

只需存储常规日期时间并忽略其他所有内容.为什么要花费额外的时间编写加载int的代码,操作它,并将它转换为日期时间,当你只能加载日期时间?


可能,但考虑到有12个人回答了这个问题,每个人都花了15分钟来思考这个问题.假设他们都是程序员并且每小时赚50美元.由于花费了大约时间来考虑这个问题,你可以购买一个闪亮的新2TB硬盘以存储额外的字节.
一个可能的原因可能是节省硬盘驱动器上的空间 - "DATETIME"数据类型需要4个字节来存储,而例如"SMALLINT"只需要四分之一.如果你只有几千行,没有什么大的区别,但如果你有很多公司的数百万行,那么你的空间节省将是巨大的.
另一个有趣的问题是,如果您依赖时间组件,它将不会考虑在一年中的不同时间使用的夏令时调整.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有