Bonjour à tous,
J'ai une table SQL server qui contient entre autres ces trois champs (et leur type) :
ladate - datetime
heure - datetime
fulldate - datetime
"ladate" et "heure" sont peuplés via un bulk insert qui ne donne pas d'erreur. Seulement le fichier texte avec lequel je peuple ces champs contient une simple valeur pour la date (type 2007-02-15) et une simple valeur pour l'heure (type 12:33:57), c'est-à-dire pas des valeurs "datetime" au sens où l'entend MSSQL.
Pas grave, ça semble se stocker correctement mais en réalité si mon fichier texte contient :
2007-02-15;12:33:57
2007-02-16;14:35:00
2007-03-01;23:57:44
j'ai en réalité dans ma table MSSQL ceci :
ladate ; heure
2007-02-15 00:00:00.000 ; 1899-12-30 12:33:57.000
2007-02-16 00:00:00.000 ; 1899-12-30 14:35:00.000
2007-03-01 00:00:00.000 ; 1899-12-30 23:57:44.000
OK je peux comprendre : datetime étant un format devant inclure ET la date ET l'heure, si cette information n'est pas fournie au moment de l'insertion des données, MSSQL met une valeur par défaut (bien que je sois déjà surpris de ce "1899" ... il me semblait que c'était 1900 ou 1901 normalement)
Maintenant arrive mon problème :
Je définis le champs "fulldate" de type datetime, et avec la formula "(ladate + heure)". J'avais déjà fait une opération similaire dans le passé et ça fonctionnait à merveille. Seulement aujourd'hui j'ai ceci dans le champs fulldate :
2007-02-13 12:33:57
2007-02-14 14:35:00
2007-02-27 23:57:44
L'addition se fait bien, mais il y a un décalage de deux jours ! Cela semble compréhensible avec ce "30 décembre" au lieu d'un plus intuitif "1er janvier". Deux jours de décalage au départ, deux jours à l'arrivée
J'ai trouvé cet article sur un forum (forum Oracle mais le problème semble être sur MSSQL aussi) :
http://database.ittoolbox.com/grou [...] um-1319231
ça parle à peu près du même problème, mais je ne comprends ni l'explication (je n'ai défini aucun int - float et quelle est cette histoire de négatif?) ni la résolution (je ne peux apparemment pas utiliser une fonction -type DATEPART ou DATEADD- dans la "Formula" du champ sur MSSQL)
Qu'est-ce qui explique ce décalage de deux jours au moment où s'écrit la valeur "temps" ?
Quelqu'un a déjà-t-il/elle eu ce genre de problème et si oui connaîtrait une résolution ?
Message édité par ZeBix le 06-03-2007 à 10:51:06