Подтвердить что ты не робот

Строка базы данных H2 в метку времени

Вставка меток времени в базе данных H2

Здравствуйте, мне нужно вставить данные типа '17 -09-2012 18: 47: 52.69 '. Функция PARSEDATETIME сокращает миллисекунды. Пример запроса:

CREATE TABLE TEST(ID NUMBER(19) not null,
DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

INSERT INTO TEST (ID, DATE) VALUES(1,
parsedatetime('17-09-2012 18:47:52.69', 'dd-MM-yyyy hh:mm:ss.SS'))

После SELECT я вижу, что миллисекунды являются нулями.

Что такое решение?

4b9b3361

Ответ 1

Согласно моему тесту, с версией H2 1.3.170 миллисекунды на самом деле не равны нулю, но 069:

select * from test;
ID  DATE  
1   2012-09-17 18:47:52.069

То же самое происходит, если вы запустите:

call parsedatetime('17-09-2012 18:47:52.69', 'dd-MM-yyyy hh:mm:ss.SS');

Если вы добавляете нуль, то он работает:

call parsedatetime('17-09-2012 18:47:52.690', 'dd-MM-yyyy hh:mm:ss.SS');

H2 внутренне использует java.text.SimpleDateFormat, поэтому он должен жить с теми же ограничениями. Если вы найдете решение в SimpleDateFormat, вы можете использовать его в функции parsedatetime в H2.

Альтернативой является использование формата временной метки ISO, как определено в JDBC. Это должно работать со всеми базами данных, которые соответствуют стандарту JDBC:

INSERT INTO TEST VALUES(2, {ts '2012-09-17 18:47:52.69'});