我应该如何表示与特定日期无关的时间段?

时间:2012-02-27 05:10:05

标签: database-design

我想设置一个函数来自动将预定义的班次插入到计划表中。我创建了一个名为shift_times的表,它存储了每种不同班次类型所需的开始/结束时间:

| start_time | lunch_start | lunch_end | end_time |
| 8:30am     | 12:00pm     | 12:45pm   | 4:30pm   |

由于开始和结束时间并非特定于任何日期,因此我不确定要用于此列的最佳数据类型。

我玩过的一个想法是使用Double,小数点后存储分钟。上面的表格如下所示:

| start_time | lunch_start | lunch_end | end_time |
| 8.5        | 12          | 12.75     | 16.5     |

该计划专门以15分钟的粒度工作,因此小数将始终舍入到最接近的0.25,并且它应该是一种非常简单的格式转换为和(并且易于作为JSON发送)。

但是,我不确定是否可以通过更详细的数字格式(例如,自午夜以来的分钟数)或者忽略日期部分的实际日期/时间字段来更好地服务。

3 个答案:

答案 0 :(得分:0)

不要试图使用双打来解决这类问题,因为它们看起来很方便。

稍微了解为什么不应该使用双打来存储金钱价值。同样的论点适用于时代。

您建议在0000之后的整数分钟可能是一个很好的起点。

答案 1 :(得分:0)

Oracle支持INTERVAL DAY TO SECOND数据类型;其他一些例如DB2支持TIME数据类型,其中没有隐含日期部分。

如果这些都不可用,我个人会在午夜后使用秒或分钟使用整数类型,但不会使用小数小时。

答案 2 :(得分:0)

SQl Server也有时间数据类型。