【发布时间】:2011-01-06 16:42:08
【问题描述】:
在数据库中存储诸如“7 年 4 个月”(例如,多年的经验)之类的内容的最佳方式是什么。浮动?
【问题讨论】:
-
感谢您的所有回答。我想我会使用 int。
标签: .net sql sql-server sql-server-2005
在数据库中存储诸如“7 年 4 个月”(例如,多年的经验)之类的内容的最佳方式是什么。浮动?
【问题讨论】:
标签: .net sql sql-server sql-server-2005
存储 BIGINT 秒数或滴答数。
在您的具体示例(多年经验)中,最好存储开始日期并计算读取数据库的时间量。
【讨论】:
由于 SQL-server 2005 缺少仅限时间的数据类型,我会使用适当大小的整数类型来保存“某个时间间隔”的计数 - 秒、毫秒等。我会做所有的翻译(除了比较)在应用层;除了 int/bigint/etc 之外,DB 没有理由担心它们
【讨论】:
使用 long [read bigint for SQLServer] 表示转换为秒的时间差异
【讨论】:
由于此字段是一个变量,因此处理此问题的最佳方法是存储事件的(估计)日期。
到现在为止的时间应该在运行时计算。
编辑:如果需要,您还可以存储结束日期以在运行时计算中使用。
【讨论】:
这取决于,如果您存储时间段 - 即开始日期和结束日期,这将成为一个可导出的值,您可以每次都计算。
如果您要存储 7.4 来模拟 year.month,那么您的粒度就会受到限制。您永远无法显示周数,如果添加 7.14 的值会发生什么?
【讨论】:
按原样存储。 IE。一个字符串7 years 4 months。
为什么?好吧,让我们从另一端想想 - 什么是 7 年(或 4 个月)?表面上人们会认为这是一个时间间隔,但事实并非如此。月和年都没有固定的时间单位(天)数,因此实际值会根据您的时间间隔的起点而有所不同。
感谢所有的缺点,但实际上这是解决问题的唯一答案。 7 years 4 months 不是一个没有起点就可以序列化的值。因此展示 == 价值。
【讨论】:
如果您要存储诸如多年经验之类的东西,我认为您真的不需要精确到秒。我会以年为单位存储数字并将其存储为浮点数。
所以“7 年 4 个月”等于 = 7 + 4/12 = 7.333..
【讨论】: