我需要创建一个列(比如idletime
),它将存储时间值小于或大于24的小时。当我尝试插入大于24的值时(For {
示例'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。
我的问题有没有可用的解决方案?我在存储过程中执行此插入查询。
答案 0 :(得分:1)
由于异常“ java.sql.SQLException ”的性质,您的sql客户端似乎遇到了问题。
例如:
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使用'HHH:MM:SS'格式,大于24小时。 有关详情,请参阅doc
答案 1 :(得分:1)
在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
小时。
答案 2 :(得分:0)
我想我理解用例,但我不确定我会选择使用 time 数据类型来解决问题。它可能是某种 int 数据类型,并命名为 idle_time_in_seconds
如果您需要更精确,也可以选择毫秒。