Envoyé par
darkterreur
Bonjour,
Si je comprend bien
"Apr 13 2012 1:55PM" serai donc une date, et si je vous comprend bien je peux faire des comparaison avec d'autre date, sql se débrouillera car il s'agit de date c'est bien cela?
Alors si nous restons sur la même idée, j'ai donc un champs date a laquelle j'ajoute pour chaque enregistrement la date du jour, et quand je fait un simple SELECT je retrouve "Apr 13 2012 1:55PM" au lieu de "2012-04-13 14:03:06.450".
Bon si je fait un INSERT d'un SELECT de ma table dans une table identique, mssql m'envoi sur les rose et me dis que le format date n'est pas bon. Ce sont ces dires. Dans mes deux requêtes il n'y a pas eu de transformation de ma date en string ou pas intentionnellement.
j'ai plutôt l'impression que sql Server fait l’âne et change de lui même le format.
Non.
SQL Server stocke les dates en mémoire sous forme de FLOAT (format utilisé par microsoft) :
cast(getdate() as float) = 41133,6132274306
La partie entière correspond au nombre de jours depuis le 01/01/1900 à minuit
La partie décimale correspond à la fraction du jour (ici, on voit que c'est le début d'après-midi puisque > 0.5)
MySQL, lui, stocke la date sous forme d'un LONG, qui correspond au nombre de secondes depuis le 01/01/1970 à minuit (représentation UNIX)
Donc à partir de là, vous comprendrez bien qu'une date est une date, et n'a rien à voir avec sa représentation.
Il faut donc extraire la date d'un SGBD EN IMPOSANT LE FORMAT
A ce moment, vous saurez décoder le format depuis MySQL au moment où vous allez reconstituer la date.
Préférez le format ISO YYYY-MM-DD HH:mm:SS qui est le plus facile à lire, et à l'avantage d'être comparable sous forme de chaînes de caractère (donc pour le debug notamment et les traitements en script, c'est plus pratique)
convert(varchar, madate, 120)
Partager