【问题标题】:How to store a time duration value to be read in decimal, hh:mm, etc如何以十进制、hh:mm 等形式存储要读取的持续时间值
【发布时间】:2012-03-15 14:44:26
【问题描述】:

我创建了一个飞行员日志软件应用程序,并以各种格式记录飞行员的飞行时间。在美国,飞行员通常以十分之一记录飞行时间,即 90 分钟的飞行时间将记录为 1.5。国际/欧洲飞行员通常以 HH:MM 记录时间,因此 90 分钟将记录为 1:30。有些人可能还需要其他格式,例如 1 + 30。

我需要一种在 SQL Server 中存储此值的通用方法,以便可以将其转换为如上所示的显示格式。我不想每个字段都有两列,一列是十进制时间,另一列是总分钟数。或者我可以以某种方式将十进制时间转换为总分钟表示并将其存储为 INT。

我们还讨论了存储 TICKS。问题在于稍后在报告、数据透视表系统(如 DevExpress 的 XtraPivotGrid 等)中聚合值。更令人担忧的是如何在移动设备上处理这些数据,如 iPhone、Android 上的日志应用程序等。 SQLite。过去,我们遇到过 Palm OS 的问题以及数字(整数)的大小和溢出问题。当您将 30 年飞行员飞行的 TICKS 加起来时,您最终可能会得到一个巨大的数字。做平均数等等......

对于以十进制跟踪飞行时间的飞行员,我们使用时间尺度,例如 27-33 分钟是 0.5,因此如果您飞行 32 分钟,则记录 0.5 或 1 小时 33 分钟,您会将其记录为 1.5 ,所以我们需要在将存储值转换为显示值时应用时间刻度。对于欧洲,在美国记录为 1.5 的最后一个案例是 1:33。

您建议我们如何将飞行员的飞行时间存储在数据库中,以便将其转换为十分之一、百分之一或 HH:MM 表示形式?还要考虑聚合、移动应用等。

谢谢。

【问题讨论】:

  • 从不将文化相关数据存储在数据库中。这里的逻辑选择是一个数字列,存储分钟或秒。使用 100 纳秒滴答声是多余的。数据的实际显示始终由 GUI 应用程序负责。不仅是该位置合适的任何单位,还有字符串格式。

标签: database performance math time


【解决方案1】:

使用数据库的 SQL 变体原生的TIME(或DATETIME)的定义。根据输出/输入的需要转换到/从外部表示。

【讨论】:

  • 这不是 TIME 或 DATE/TIME 值,它是任务(即航班)的小时和分钟的累积。因此,这本身不是上午 8:00,而是飞行期间的 360 分钟。我们将其显示为 6:00 或 6.0。
  • MySQL 的文档表明 TIME 可以采用 '-838:59:59' 到 '838:59:59' 范围内的值,这似乎适合您的要求。您使用的是哪种 SQL 方言?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2020-06-25
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 2015-12-25
相关资源
最近更新 更多