如何在Mysql中存储超过24小时的时间?

时间:2018-04-19 07:32:12

标签: mysql mysql-workbench sqlexception node-mysql editline

我需要创建一个列(比如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。

我的问题有没有可用的解决方案?我在存储过程中执行此插入查询。

3 个答案:

答案 0 :(得分: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使用'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小时。

SQL FIDDLE

答案 2 :(得分:0)

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

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