Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1378 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MSSQL Server] Somme date + time : 2 jours de décalage ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MSSQL Server] Somme date + time : 2 jours de décalage ?

n°1524188
ZeBix
edit > preview
Posté le 06-03-2007 à 10:14:48  profilanswer
 

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  :sarcastic:

 

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
mood
Publicité
Posté le 06-03-2007 à 10:14:48  profilanswer
 

n°1525174
casimimir
Posté le 07-03-2007 à 13:41:24  profilanswer
 

personellement au moment d'injecter l'heure j'y collerai deja une date, sans doute 1900/01/01, histoire de ne pas avoir de surprise.
 
et histoire d'avoir une sécurité supplémentaire je me risquerai meme a un:
la_date+date_heure-trunc(date_heure) au moment ou je veux ma date/heure

n°1526150
ZeBix
edit > preview
Posté le 09-03-2007 à 09:25:44  profilanswer
 

Merci pour ta réponse,  
 
J'ai pensé à ta première solution aussi, le souci c'est que je fais le bulk insert directement depuis un fichier texte duquel je ne maîtrise pas les données (i.e. ce sont des logs fournis par le système SPS de M$ et le format est comme ça point à la ligne :( ) ...
 
Finalement je me suis décidé pour une procédure stockée (que je transformerai peut-être en trigger à l'insert) qui rajoute deux jours à tous les champs "heure" dont l'année est inférieure à 1900 ... cela semble fonctionner pour le moment, on verra sur le long terme ...  
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MSSQL Server] Somme date + time : 2 jours de décalage ?

 

Sujets relatifs
Police 8px sous IE, 7px sous FF sinon décalage[Windwos XP] date et heure dans un nom de repertoire
[C] decalage de bits??Trigger SQL server 2005
Stockage de date dans un fichier XML[SQL Server] Se connecter en admin sans le mot de passe
Synchro table sql server et fichier xlsOracle - champs DATE à trier au 100ème de seconde
select max(date)[MySql]Probleme requete interval date début- date fin pour réservation
Plus de sujets relatifs à : [MSSQL Server] Somme date + time : 2 jours de décalage ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR