Как хранить время более 24 часов в Mysql?

Мне нужно создать столбец (скажем, 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.

Есть ли какое-либо решение для моей проблемы? Я выполняю этот запрос вставки в хранимой процедуре.

3 ответа

В 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

Кажется, что у вас есть проблема с вашим клиентом sql из-за природы исключения "java.sql.SQLException".

  • Войдите в пустую консоль или другой sql client и попробуйте выполнить то, что вы пытались сделать

например:

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 часа. Смотрите документ для более

Я думаю, что понимаю вариант использования, но я не уверен, что решил бы использовать тип данных времени для решения. Это также может быть своего рода тип данных int с именем idle_time_in_seconds

Вы также можете выбрать миллисекунды, если вам нужно быть более точным.

Другие вопросы по тегам