Как хранить время более 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 из-за природы исключения "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
Вы также можете выбрать миллисекунды, если вам нужно быть более точным.