【问题标题】:What data type should I use for a 'duration' attribute?我应该为“持续时间”属性使用什么数据类型?
【发布时间】:2017-06-14 23:37:08
【问题描述】:

我正在使用 phpmyadmin/MySQL 创建数据库。

用于飞机/巴士/火车预订系统。

我有一个“depart_time”属性,它是一种时间数据类型。在同一张表中,我有一个“持续时间”属性。稍后我需要对这个持续时间属性进行乘法运算(取决于它是火车/公共汽车/飞机)。

我的问题是 - 这个持续时间属性的最佳数据类型是什么?

我考虑过使用十进制类型 - 但其中的值不能准确表示时间(例如 1.30 不表示 1 个半小时,它需要是 1.50 - 如果这有意义的话)。 我也考虑过为这个字段使用时间数据类型,但我不确定是否可以乘法?

在谷歌上搜索有关时间数据类型的乘法后,我找不到任何帮助。

希望这是有道理的,如果您需要更多信息,请随时在 cmets 中提问!

提前致谢!

【问题讨论】:

标签: mysql database phpmyadmin sqldatatypes


【解决方案1】:

使用int 并以您感兴趣的最小单位记录持续时间。例如,如果您需要精确到分钟,请将一个半小时存储为 90 分钟。为显示目的格式化该值是表示逻辑,而不是数据库的业务。

【讨论】:

    【解决方案2】:

    可以使用 ISO 8601 持续时间格式以开放标准方式表示持续时间。

    https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm

    【讨论】:

      【解决方案3】:

      如果我处于那个位置,我可能会:

      1. 以秒为单位。您不太可能需要比这更高的精度。
      2. 在字符串中,例如 P1D 1 天,P1W2DT3H 1 周 2 天 3 小时。这是许多图书馆使用的标准格式,可以更好地处理某些事情确实需要 1 天,但这是闰小时的情况。

      不过,在大多数情况下,只需使用秒数就可以了。

      【讨论】:

        【解决方案4】:

        我会在数据库中将它表示为秒或分钟(您想要的最小精度)。向用户展示应该在前端动态完成(例如,以分钟(1 分钟,30 分钟 180 分钟),小时(0.1h,1h,3h,3.0h),天(0.5d,1d)或最小包装(1d 5h) 42 分钟)。

        你应该把它分开。所以我建议使用秒。

        【讨论】:

          【解决方案5】:

          我已经解决了该怎么做。

          而不是在数据库中进行。我将使用 Python 进行乘法运算。

          我从表格中获取信息,将数据转换为 int/datetime.deltatime,然后乘法起作用了。

          然后我只需要根据是公共汽车/火车/飞机返回该数据。

          【讨论】:

            【解决方案6】:

            对于不涉及金钱的乘数,只需使用FLOAT

            然后在几秒钟内工作(或几分钟,如果您愿意)。可以在INT UNSIGNED

            使用适当的DATETIME 函数将秒转换为hh:mm 或任何您想要的输出。注意:内部格式不必与显示格式相同。

            【讨论】:

              猜你喜欢
              • 2012-09-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-04
              • 2017-03-26
              • 1970-01-01
              • 1970-01-01
              • 2019-07-04
              • 2011-08-05
              相关资源
              最近更新 更多