在 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 个是:
使用
INTEGER
存储 Unix time_t 值(自 1970 年 1 月 1 日以来的秒数)
(如果采用这种方式,请确保至少使用 64 位整数)使用 SQL 日期和时间类型
(TIME
、、DATETIME
等TIMESTAMP
- 可用类型列表因数据库服务器而异)使用无聊的
VARCHAR
字段
(不要这样做。上面的“从不”将变成“好吧,就这一次……”)
最“正确”的方式是在 SQL 实现中使用日期和时间类型 - 这通常允许您使用内置的日期比较和格式化命令。
紧随其后的是整数/time_t 值,因为有明确定义的函数来转换和处理这种日期表示。