La moitié des champs dates sont mals formatés

Fermé
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022 - 8 nov. 2022 à 11:26
blackmefias_3350 Messages postés 706 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 8 mars 2024 - 9 nov. 2022 à 15:49

Bonjour,

je rencontre un soucis dans une exactraction d'une base mysql. 

Pour le contexte, j'ai récupéré une base de données et avec celle ci j'ai réalisé un programme afin d'extraire des données en fonction de certains critères.

J'ai plusieurs champs, dont 3 champs dates, dans une même table, toutefois il se passe un phénomène étrange:

pour les deux premiers champs dates, le jour et le mois sont inversés, alors que pour les deux derniers champs dates, la date est bien formaté:

et voici la structure de la table, concernant les dates :

SOLDE A DATE varchar(9)     utf8_general_ci         Oui     NULL
DATE DE DEBUT      varchar(10)     utf8_general_ci         Oui     NULL
DATE DE FIN      varchar(10)     utf8_general_ci         Oui     NULL
DATE ENREGISTREMENT      varchar(10)     utf8_general_ci         Oui     NULL

et dans mon programme je fais un select tout simple : 

select t1.identifiant,
t1.date_de_debut,
t1.date_de_fin,
t1.date_enregistrement,
........
........ 

le soucis c'est que j'ai déjà tenté de modifier la structure de la table, mais toutes les données s'en retrouvent chamboulées, comme je travaille en prep, j'ai recréé la table avec les données d'origine.

La base de données a été créé à partir d'export de fichier excel, il s'agit d'export de données d'un as400, je ne peux donc pas touché à la strucutre de la table.

Le problème c'est que je ne comprend pas pourquoi, dans deux champs dates, le jour et le mois sont inversés alors que pour les deux derniers champs dates, c'est ok, sachant que les 4 champs date ont la même structure.

Dans mon programme, j'ai tenté de faire la chose suivante dans ma requete : 

date_format(.date_debut, '%d/%m/%Y')

mais ça ne change rien .

Merci pour vos lumières et votre aide.


Windows / Chrome 107.0.0.0

3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
8 nov. 2022 à 13:57

Bonjour

Dans une base de données MySQL, une date ça s'enregistre dans un champ de type date... Et non pas dans in varchar !!


0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
8 nov. 2022 à 14:21

Bonjour,

justement je n'ai pas eu le choix.

Ce n'est pas moi qui a créé la base de données, 

Ils ont fait un export de plusieurs tables de l'as400, j'ai donc obtenu 3 fichiers excels. Lorsqu'ils ont créés la base de données, j'ai vu la structure et j'ai constaté que les champs dates étaient en varchar.

J'ai tenté, sur un champ date, de modifier le type en dateTime, mais toute la colonne a été remodelé et les données sont devenue incohérente, exemple :

Avant modification on a : 31/12/14

si je transforme le champ date en dateTIme j'ai un truc du genre :2031-12-14 00:00:00

Donc je ne peux pas modifier la structure de la table.

Ce que je ne comprend pas , c'est que lorsque je fais ma requete, la plupart des valeurs sont corrects, mais j'ai toujours une poignée de données, où le jour et le mois sont inversés ...

Merci

0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
9 nov. 2022 à 14:32

Cela n'a pas de sens d'utiliser date_format() sur un champ de type texte.

C'est peut-être dans Excel que la transformation non souhaitée a eu lieu.

Si tu as un champ texte dans lequel le mois et la date sont toujours inversé, penses-tu qu'il est difficile de corriger cela?  Connais-tu les fonctions de manipulation de chaines de caractères?

Tu essaies une méthode foireuse et tu en déduis rapidement "je ne peux pas modifier la structure de la table".

Le plus logique, c'est de créer quatre nouveaux champs de type date, et d'y mettre les valeurs en utilisant la fonction date().

0
blackmefias_3350 Messages postés 706 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 8 mars 2024 58
9 nov. 2022 à 15:49

Bonjour, 

En mettant la fonction DateTime  il est normal d'avoir cet affichage  2031-12-14 00:00:00

car cette fonction s'écrit de cette façon : 

=DATETIME([Année],[Mois],[Jour],[Heure],[Minute],[Seconde]) 

pour votre cas, il suffit de mettre DATE(dd,mm,yy)    vous aurez ainsi la date à la française   (Jour, Mois, Année) 

par contre si vous voulez avoir l'année sur 4 chiffres, vous devrez faire comme ceci :  DATE(dd,mm,yyyy).


0