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?
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'});