1

我需要创建一个列(比如idletime)来存储小时数小于或大于 24 的时间值。当我尝试插入大于 24 的值时(例如 '80:00:00'、'129:23:12'等),我收到以下错误代码:

java.sql.SQLException: Illegal hour value '80' for java.sql.Time type in value '80:00:00.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
.....

我在网上搜索了一下,发现 TIME 数据类型的范围是 00:00:00 到 23:59:59,没有达到 24:00:00。

有什么解决方案可以解决我的问题吗?我正在存储过程中执行此插入查询。

4

3 回答 3

2

在 MySQL 中,您可以存储80:00:00数据time类型。

CREATE TABLE `test_time` (
  `id` int(11) NOT NULL,
  `time` time DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

使用 QUERY 获取日期时间时:

SELECT TIMESTAMP(`time`) FROM `test_time`

输出:

TIMESTAMP(`time`)    
---------------------
2018-04-22T08:00:00Z 

我注意到以上述格式存储时,存储时间将增加 80 小时。例如:

如果您存储了 80 小时,mysql 所做的就是设置当前时间 + 您的输入。当您想检查添加时的日期和时间时 80:00:00,它将显示在输出上方,还可以存储最大838:59:59小时数。

SQL 小提琴

于 2018-04-19T07:42:05.067 回答
1

由于异常“ java.sql.SQLException ”的性质,您的 sql 客户端似乎有问题。

  • 进入一个裸控制台或另一个 sqlclient 并尝试执行你想要做的事情

例如:

CREATE Table mytimetable (testtime TIME);

Insert into mytimetable values ('1:1:1'),('080:1:1'),('80:1:1');

select * from mytimetable ;
01:01:01
80:01:01
80:01:01

MySQL 使用大于 24 小时的'HHH:MM:SS'格式。有关更多信息,请参阅文档

于 2018-04-19T07:40:39.837 回答
0

我想我理解用例,但我不确定我会选择使用时间数据类型来解决问题。它也可能是某种int数据类型并命名为idle_time_in_seconds

如果您需要更精确,您也可以选择毫秒。

于 2018-04-19T17:42:29.877 回答