在MySQL中使用时间数据类型而不使用秒

在MySQL中使用时间数据类型而不使用秒,mysql,time,types,Mysql,Time,Types,我试图在MySQL数据库中存储12/24小时(即00:00)的时钟时间。目前我使用的是时间数据类型。这工作正常,但它坚持在列中添加秒数。因此,您输入09:20,并将其存储为09:20:00。有没有办法在MySQL中将其限制为00:00?这看起来是不可能的。数据类型定义为以1秒的分辨率表示一天中的时间(或经过的时间)。但是,在选择查询: SELECT DATE_FORMAT(NOW(), '%k:%i'); +-----------------------------+ | DATE_FORMAT

我试图在MySQL数据库中存储12/24小时(即00:00)的时钟时间。目前我使用的是时间数据类型。这工作正常,但它坚持在列中添加秒数。因此,您输入09:20,并将其存储为09:20:00。有没有办法在MySQL中将其限制为00:00?

这看起来是不可能的。数据类型定义为以1秒的分辨率表示一天中的时间(或经过的时间)。但是,在
选择
查询:

SELECT DATE_FORMAT(NOW(), '%k:%i');
+-----------------------------+
| DATE_FORMAT(NOW(), '%k:%i') |
+-----------------------------+
| 4:09                        |
+-----------------------------+
1 row in set (0.00 sec)


SELECT DATE_FORMAT(NOW(), '%H:%i');
+-----------------------------+
| DATE_FORMAT(NOW(), '%H:%i') |
+-----------------------------+
| 04:09                       |
+-----------------------------+
1 row in set (0.00 sec)
不接受任何参数或修改器来定义范围或精度。但是,如果小心,可以省略插入时的秒数:

为时间列指定缩写值时要小心。MySQL 用冒号将缩写的时间值解释为一天中的时间。 也就是说,“11:12”的意思是“11:12:00”,而不是“00:11:12”。MySQL解释 不带冒号的缩写值,假设 最右边的数字表示秒(也就是说,表示经过的时间,而不是 而不是一天中的某个时间)。例如,您可能会想到'1112'和1112 意思是“11:12:00”(11点后12分钟),但是 将其解释为“00:11:12”(11分12秒)。同样地, “12”和“12”被解释为“00:00:12”

+------------+-----------+
|示例_id |已过|
+------------+-----------+
|          1 | 123:45:00 |
|          2 | 123:45:00 |
+------------+-----------+
。。。您可以在读取时(如有必要)通过应用适当的方法删除它们,注意:

如果时间值包含大于23的小时部分,则 %H和%k小时格式说明符生成的值大于通常的值 范围为0..23。其他小时格式说明符生成小时 模12的值

+------------+---------+
|示例_id |已过|
+------------+---------+
|          1 | 123:45  |
|          2 | 123:45  |
|          3 | 2:00    |
+------------+---------+
由于MySQL/5.7.5,您还可以使用自动获取显示值:

-- Completely untested, I don't have 5.7 yet
CREATE TABLE example (
    example_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    elapsed TIME NOT NULL,
    -- Size to accomodate for '-838:59:59'
    elapsed_display VARCHAR(10) AS (TIME_FORMAT(elapsed, '%k:%i')) VIRTUAL NOT NULL,
    PRIMARY KEY (example_id)
);
INSERT INTO example (elapsed) VALUES ('2:00');
SELECT example_id, TIME_FORMAT(elapsed, '%k:%i') AS elapsed
FROM example;
-- Completely untested, I don't have 5.7 yet
CREATE TABLE example (
    example_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    elapsed TIME NOT NULL,
    -- Size to accomodate for '-838:59:59'
    elapsed_display VARCHAR(10) AS (TIME_FORMAT(elapsed, '%k:%i')) VIRTUAL NOT NULL,
    PRIMARY KEY (example_id)
);