web-dev-qa-db-fra.com

Chaîne de base de données H2 à l'horodatage

Insertion d'horodatages dans la base de données H2

Bonjour, je dois insérer des données comme '17 -09-2012 18: 47: 52.69 '. La fonction PARSEDATETIME coupe les millisecondes. Exemple de requête:

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'))

Après SELECT, je vois que les millisecondes sont des zéros.

Quelle est la solution?

27
shprotova

Selon mon test, avec H2 version 1.3.170, les millisecondes ne sont pas réellement nulles, mais 069:

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

La même chose se produit si vous exécutez:

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

Si vous ajoutez un zéro, cela fonctionne:

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

H2 utilise en interne Java.text.SimpleDateFormat, il doit donc vivre avec les mêmes limitations. Si vous trouvez une solution dans SimpleDateFormat, vous pouvez l'utiliser dans la fonction parsedatetime dans H2.

Une alternative consiste à utiliser le format d'horodatage ISO tel que défini dans JDBC. Ceci est censé fonctionner avec toutes les bases de données conformes à la norme JDBC:

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