【问题标题】:How to store length of time in DB如何在数据库中存储时间长度
【发布时间】:2011-01-06 16:42:08
【问题描述】:

在数据库中存储诸如“7 年 4 个月”(例如,多年的经验)之类的内容的最佳方式是什么。浮动?

【问题讨论】:

标签: .net sql sql-server sql-server-2005


【解决方案1】:

存储 BIGINT 秒数或滴答数。

在您的具体示例(多年经验)中,最好存储开始日期并计算读取数据库的时间量。

【讨论】:

    【解决方案2】:

    由于 SQL-server 2005 缺少仅限时间的数据类型,我会使用适当大小的整数类型来保存“某个时间间隔”的计数 - 秒、毫秒等。我会做所有的翻译(除了比较)在应用层;除了 int/bigint/etc 之外,DB 没有理由担心它们

    【讨论】:

      【解决方案3】:

      使用 long [read bigint for SQLServer] 表示转换为秒的时间差异

      【讨论】:

      • @JNK 你是对的。我做了必要的改变,问题中没有提到 SQL Server .. 除了标签
      【解决方案4】:

      由于此字段是一个变量,因此处理此问题的最佳方法是存储事件的(估计)日期。

      到现在为止的时间应该在运行时计算。

      编辑:如果需要,您还可以存储结束日期以在运行时计算中使用。

      【讨论】:

      • 这不适用于之前结束的事件。如果我在 3 周前运行了 2 小时,你的方法就行不通
      • 你在做出不合理的假设。如果他正在存储事件的持续时间怎么办?
      【解决方案5】:

      这取决于,如果您存储时间段 - 即开始日期和结束日期,这将成为一个可导出的值,您可以每次都计算。

      如果您要存储 7.4 来模拟 year.month,那么您的粒度就会受到限制。您永远无法显示周数,如果添加 7.14 的值会发生什么?

      【讨论】:

        【解决方案6】:

        按原样存储。 IE。一个字符串7 years 4 months。 为什么?好吧,让我们从另一端想想 - 什么是 7 年(或 4 个月)?表面上人们会认为这是一个时间间隔,但事实并非如此。月和年都没有固定的时间单位(天)数,因此实际值会根据您的时间间隔的起点而有所不同。

        感谢所有的缺点,但实际上这是解决问题的唯一答案。 7 years 4 months 不是一个没有起点就可以序列化的值。因此展示 == 价值。

        【讨论】:

        • 这是一个非常糟糕的主意。当他想知道事件 a 比事件 b 花费了多长时间时会发生什么?他需要解析字符串吗?
        • 那么他问错了问题。正确的问题是“我应该存储什么”而不是“如何”
        • 我明白你在说什么,所以我给了你一个+。我认为这个问题有点模棱两可,我不认为你给出的答案对于我 认为 Prabhu 打算问的问题来说是一个好方法,但根据引用的例子,这个实际上可能是最好的建议。如果(一个很大的如果,基于我对大局的无知)您想要静态存储某人对“工作年限”的回答(而不是根据开始日期等计算),然后允许用户输入“7 年 4 个月”之类的字符串并按原样存储是有意义的。
        【解决方案7】:

        如果您要存储诸如多年经验之类的东西,我认为您真的不需要精确到秒。我会以年为单位存储数字并将其存储为浮点数。

        所以“7 年 4 个月”等于 = 7 + 4/12 = 7.333..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-19
          • 2017-02-02
          • 2013-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-13
          相关资源
          最近更新 更多