在 SQL 中存储时间

在 SQL 中存储时间

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

有一个字段只关注操作发生的时间。示例值将是下午 2:30 或 14:30,对​​我来说哪个都不重要。这个值永远不会(哈哈)被添加、减去、比较等。它只是一个静态属性。

答案1

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

我始终建议以专用格式(DATE、等)存储日期TIME和时间等内容DATETIME,因为这样,如果您需要查询值或以其他方式操作它们,它会使编写 SQL 变得更容易,因为 SQL 引擎知道字段中的数据类型。例如,如果您将日期或时间存储在一个VARCHAR实例中,您可能能够或不可能(取决于数据库引擎)编写一个指定的查询而不会出现问题。SomeDateTimeField >= '2011-01-01 09:00:00' AND SomeDateTimeField <= '2011-01-01 17:00:00'

作为参考,SQL Server 和 MySQLTIME数据类型信息在这里。

答案2

有很多选择 - 其中最大的 3 个是:

  1. 使用INTEGER存储 Unix time_t 值(自 1970 年 1 月 1 日以来的秒数)
    (如果采用这种方式,请确保至少使用 64 位整数)

  2. 使用 SQL 日期和时间类型
    TIME、、DATETIMETIMESTAMP- 可用类型列表因数据库服务器而异)

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


最“正确”的方式是在 SQL 实现中使用日期和时间类型 - 这通常允许您使用内置的日期比较和格式化命令。

紧随其后的是整数/time_t 值,因为有明确定义的函数来转换和处理这种日期表示。

相关内容