在SQL中存储TIME

在SQL中存储时间的正确方法是什么?

有一个领域只关心,当一个行动发生。 示例值将是下午2:30或14:30,这对我来说并不重要。 这个值永远不会(ha,ha)加,减,比等等。它只是一个静态属性。

如果您使用的是Microsoft SQL Server或MySQL(我相信其他人也会支持这一点,但是这些是我唯一知道的),它们都包含一个用于存储时间值的专用数据types。

我总是build议在他们的专用格式( DATETIMEDATE等)中存储诸如date和时间之类的东西,因为如果您需要查询值或以其他方式操作它们,则会使得SQL更容易编写,因为SQL引擎知道什么数据types在现场。 例如,如果您将date或时间存储在VARCHAR中,则可以(也可以不依赖于数据库引擎)编写指定SomeDateTimeField >= '2011-01-01 09:00:00' AND SomeDateTimeField <= '2011-01-01 17:00:00'没有它呕吐,例如。

作为参考,SQL Server和MySQL TIME数据types信息在这里。

  • SQL Server TIME数据types
  • MySQL TIME数据types

存在很多选项 – 大三:

  1. 使用一个存储Unix time_t值的INTEGER (从1970年1月1日起秒)
    (如果你走这条路线,一定要使用至less一个64位整数)

  2. 使用SQLdate和时间types
    TIMEDATETIMETIMESTAMP等 – 可用types列表根据数据库服务器而不同)

  3. 使用无聊的VARCHAR字段
    (不要这样做,上面的“永远”会变成“好吧,就这样一次…”)


最“正确”的方法是使用date和时间types为您的SQL实现 – 这通常可以让您使用内置的date比较和格式化命令。

closures的第二个将是整数/ time_t值,因为有明确定义的函数来转换和处理这个表示的date。