【问题标题】:What is a meaningfull datatype to save hours什么是有意义的数据类型可以节省时间
【发布时间】:2011-05-03 08:45:50
【问题描述】:

在 .net 中节省时间的好数据类型是什么?

是使用decimal 类型更好还是double 数据类型更合适。小时,我的意思是值,例如:

  • 2 小时
  • 1.5 90 分钟
  • 8.25 持续 8 小时 15 分钟。

【问题讨论】:

    标签: c# .net sql-server database-design


    【解决方案1】:

    表示小时数的一个好方法是使用 TimeSpan:

    TimeSpan hours = TimeSpan.FromHours(2);
    

    考虑到decimaldouble 之间的选择,我可能会选择double,因为通常不期望准确表示时间量。如果您需要小数小时数的精确十进制表示(这似乎不太可能),请使用decimal

    您也可以考虑将其存储为整数,例如秒、毫秒或滴答声。

    【讨论】:

    • +1 谢谢。什么数据类型最好保存在数据库(Sql-Server)中?
    • @HCL:将其转换为整数,具有必要的精度,分,秒,毫秒...
    【解决方案2】:

    存储小时数的最佳数据类型是专为它设计的数据类型 - TimeSpan

    它具有允许您添加/减去/转换它的方法。

    至于数据库中的存储,这实际上取决于您使用它的目的以及需要什么样的分辨率。

    我会使用 time 数据类型 - 因为它将保存范围:

    00:00:00.0000000 到 23:59:59.9999999

    但是,如果您需要在此字段中保存超过 24 小时,您可能需要考虑使用 tinyintint 保存分钟数(假设这是您需要的最大时间分辨率)。

    【讨论】:

      【解决方案3】:

      在 SQL Server 中使用 INT 或 DECIMAL。 TIME 并不是存储持续时间的理想选择,因为 TIME 定义了 24 小时制内的时间点,而持续时间只是一个整数或十进制值。您不能对 TIME 值进行加法或减法,并且没有明显的方法可以使用 TIME 来存储大于 24 小时的持续时间。

      【讨论】:

      • 我完全同意,建议 TIME 的人没有阅读问题。
      【解决方案4】:

      为什么不使用TIME

      您可以使用 DATEADD 和 TIME 来更轻松地操作它:

      SELECT DATEADD(minute, 30, CAST('2:00:00' AS TIME))
      

      变成02:30:00.0000000。等等……

      【讨论】:

      • +1 谢谢,我最初的问题是关于 .net,但另外,我也对此感兴趣。
      • 这似乎不是一个好主意。 TIME 不是为存储持续时间而设计的,使用它的函数也不是。与使用数字类型相比,我只能看到缺点。
      • @dportas:请问它的设计目的是什么?事实上,持续时间。
      • TIME 是为时间(时间点)而不是持续时间设计的。在您的示例中,您正确使用了 30 分钟的数字,而不是 TIME。你不能对 TIME 值做同样的事情,因为时间不能加减。
      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多