la date en sql

Petit nouveau ! | 4 Messages

25 févr. 2011, 10:45

Bonjour,
J'ai dans ma BDD des tuples qui sont des dates au format ex: 17-janv-2011 mais j'aimerais faire des calcules sur ces dates en php. Comment puis-je convertir ces dates en 17/01/2011 ? Dans ma table ces dates sont en VARCHAR(25) J'ai essayais le type DATE mais je n'obtient que dès 00-00-0000.
merci pour votre aide :priere:

ViPHP
xTG
ViPHP | 7331 Messages

25 févr. 2011, 11:44

Boudiou on a pas inventé le type date pour rien...

Tu peux faire un script PHP récupérant toutes les dates, les passant dans strtotime() et les remettre dans un champs de type DATE.
Le seul soucis que je vois à cela est que tu as un format français... Or je ne suis pas sûr que strtotime() arrive à te le prendre en compte.
Il faudra peut être passer un filtre (str_replace() par exemple) pour transformer les mois français en mois anglais.

Petit nouveau ! | 4 Messages

25 févr. 2011, 12:13

Je viens tout d'abord de tester sa : <?php echo strtotime("10 September 2001"), "\n";?>
Es sa me donne : 1000072800 sa ne veut pas convertir en 10-09-2001

Avatar du membre
ViPHP
ViPHP | 3008 Messages

25 févr. 2011, 12:37

As-tu lu un peu la documentation de strtotime ?
strtotime() essaye de lire une date au format anglais dans la chaîne time, et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 UTC)
L'utilisation du format timestamp pour les dates est très facile si tu veux ensuite faire des opérations sur les dates. Si tu n'as pas beaucoup de données, change de type.

Petit nouveau ! | 4 Messages

25 févr. 2011, 12:53

Oui sur ce lien http://php.net/manual/fr/function.strtotime.php
Problème timestamp à besoin de la date et de l'heure! Moi je veux juste convertir le mois fr (ex: janv ) en 01. Et sa pour plusieurs colonne d'une table contenant 2000 lignes.
J'ai essayé tout ce que j'ai pu mais la ej crois qu'il n'y à pas de solution.
Les données de ma base provient d'import de fichiers exel. J'ai essèyé de modifier le type de donnée dans exel , donc date pour obtenir 10/01/2011 au lieu de 10-janv-2011 mais quand j'importe sa dans ma base j'obtient 39094.
Pfff je désespère sur ce coup là!

ViPHP
AB
ViPHP | 5818 Messages

25 févr. 2011, 17:05

Même si MySQL essaye d'interpreter les valeurs sous différents formats, il s'attend toujours à ce que l'année soit dans la partie gauche de la valeur. Les dates doivent êtres données sous la forme année-mois-jour (exemple : 98-09-04), au lieu de mois-jour-année ou jour-mois-année qui sont très utilisés ailleurs (comme 09-04-98 ou '04-09-98').
http://dev.mysql.com/doc/refman/5.0/fr/ ... types.html

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 févr. 2011, 21:30

et pour l'affichage mysql offre la fonction date_format :)

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 févr. 2011, 21:39

On doit aussi pouvoir le faire simplement en sql en découpant la chaine et en stockant le résultat dans un champ date :
UPDATE ma_table
SET mon_champ_date = concat(
	SUBSTRING(mon_champ_varchar,-4)
	, '-'
	, CASE SUBSTRING(mon_champ_varchar,2,3)
		WHEN 'jan' THEN '01'
		WHEN 'fev' THEN '02'
		WHEN 'mar' THEN '03'
		...
	END CASE
	, '-'
	, SUBSTRING(mon_champ_varchar,0,2)
);
Une fois que c'est fait, tu peux supprimer le champ varchar et n'utiliser que le champ date :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...