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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Update d'un champ txt vers un champs date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Update d'un champ txt vers un champs date

n°1597972
fourniey
Rendre au prochain
Posté le 09-08-2007 à 20:37:36  profilanswer
 

Bonjour,
 
J'ai un champ text qui contient un date jj-mm-aaaa que je voudrais transférer dans un champs date aaaa-mm-jj. J'ai essayé cela mais il ne se passe rien.
 
update ATS_iden set fete=substr(ATS_iden.anniversaire,7,4)+'-'
+substr(ATS_iden.anniversaire,4,2)+'-'
+substr(ATS_iden.anniversaire,2,2)
 
Merci de votre aide!


Message édité par fourniey le 09-08-2007 à 21:09:16
mood
Publicité
Posté le 09-08-2007 à 20:37:36  profilanswer
 

n°1598033
casimimir
Posté le 10-08-2007 à 08:34:17  profilanswer
 

si ton champ est bien au format date dans ta base alors il ne faut pas le voir tel qu'il s'affiche, le forta de stockage est interne et c'est ta visualisation qui applique un format d'affichage

n°1598047
jeca
Posté le 10-08-2007 à 09:36:08  profilanswer
 

Bonjour,

 

Pour mysql :

Code :
  1. update ATS_iden
  2. set fete = concat_ws('-', substring(ATS_iden.anniversaire, 7, 4),
  3.                           substring(ATS_iden.anniversaire, 4, 2),
  4.                           substring(ATS_iden.anniversaire, 1, 2))


Message édité par jeca le 10-08-2007 à 09:39:15
n°1598157
fourniey
Rendre au prochain
Posté le 10-08-2007 à 13:28:43  profilanswer
 

Merci, la requête fonctionne parfaitement.

n°1598295
MagicBuzz
Posté le 10-08-2007 à 16:22:00  profilanswer
 

mise à par "substr()" remplacé par "substring()" c'est quoi la différence entre les deux requêtes ? :heink:

n°1598312
jeca
Posté le 10-08-2007 à 16:37:29  profilanswer
 

concat_ws

n°1598318
MagicBuzz
Posté le 10-08-2007 à 16:40:32  profilanswer
 

ouais, mais concat_ws ça fait quoi ?
 
mise à par coller un caractère donné entre chaque variable passée en paramètres ?
 
Donc entre a + '-' + b + '-' + c et concat_ws('-', a, b, c) je ne vois pas trop ce que ça change :heink:


Message édité par MagicBuzz le 10-08-2007 à 16:42:39
n°1598321
MagicBuzz
Posté le 10-08-2007 à 16:43:33  profilanswer
 

trouvé pkoi la première requpete marchait pas :
 
substr(ATS_iden.anniversaire,2,2)  
 
au lieu de  
 
substr(ATS_iden.anniversaire,1,2)
 
j'imagine que se retrouver avec un '/' à la fin d'une date au format yyyy-mm-dd , mysql n'aime pas :D


Message édité par MagicBuzz le 10-08-2007 à 16:44:40
n°1598329
jeca
Posté le 10-08-2007 à 16:55:47  profilanswer
 

Exécute cette requête sur mysql, et tu verras l'utilité de 'concat()' :
 

Code :
  1. select substr('01/08/2007',7,4)+'-'+substr('01/08/2007',4,2)+'-'+substr('01/08/2007',1,2)


Résultat : 2016.


Message édité par jeca le 10-08-2007 à 16:57:56
n°1598334
MagicBuzz
Posté le 10-08-2007 à 17:05:05  profilanswer
 

il serait pas un peu couillé MySQL des fois ?
 
Parceque chez moi, au pire, 2007 - 8 - 1 ça fait 1998, pas 2016 :o
 
Sinon, MySQL n'a pas un oppérateur de concaténation de chaînes du coup ?
 
Genre Oracle c'est || à la place de + quand on utilise des chaînes...
 
En tout cas, évaluer un calcul à partir d'une chaîne (en se trompant), il est trop fort MySQL... Total n'importe quoi !

mood
Publicité
Posté le 10-08-2007 à 17:05:05  profilanswer
 

n°1598535
polo021
Posté le 11-08-2007 à 11:49:25  profilanswer
 

y a pas une fonction de conversion de char vers date???

n°1598539
TheRom_S
Posté le 11-08-2007 à 12:11:30  profilanswer
 

MagicBuzz a écrit :

il serait pas un peu couillé MySQL des fois ?
 
Parceque chez moi, au pire, 2007 - 8 - 1 ça fait 1998, pas 2016 :o


 
ben non, '-' = 0 c'est tout


---------------
The Rom's, à votre service
n°1598648
MagicBuzz
Posté le 11-08-2007 à 21:00:37  profilanswer
 

'-' égale tout ce que tu veux, mais pas 0...
Ca ne respecte pas une once de standard ce truc.
 
Quelle bouze ce MySQL.
 
Dans le pire des cas, il devrait au moins planter, en sortant un cast error. Dans le meilleurs des cas, faire un fallback vers le type string qui est le seul à pouvoir se concaténer avec n'importe quoi.
 
int + char, n'importe quel langage doit soit planter en disant qu'il n'existe pas d'oppérateur d'addition entre un int et un char, ou caster le int en char afin de faire une concaténation.
 
convertir le char en int, c'est débile, d'autant que 10 peut selon la base valoir 10, 2, 16, 8... MySQL est trop fort. Non seulement il ne te prévient pas de ce qu'il fait, mais en plus il prend des décisions de ce genre... Too much of the balle.

n°1598668
jeca
Posté le 12-08-2007 à 09:53:42  profilanswer
 

Marrant ça :
 

Code :
  1. <?php
  2.   list($jj, $mm, $aaaa) = explode('/', '01/08/2007');
  3.   $var = $aaaa + '-' + $mm + '-' + $jj;
  4.   echo $var; //= 2016
  5. ?>

n°1598801
MagicBuzz
Posté le 13-08-2007 à 09:28:53  profilanswer
 

Parceque PHP est un langage ? Et ça respecte une norme ? Et t'es capable de prédire son comportement ?
 
Pas trop le bon exemple ton truc.
 
Dans tous les cas, caster un string en numérique de façon implicite, c'est de la bêtise douce. L'inverse peut être acceptable, mais pas dans ce sens.
 
Quant à convertir ensuite "-" en -0, c'est à dire 0, là on dépasse la connerie... L'art de convertir un oppérateur en valeur, on aura tout vu ! :pt1cable:

n°1598814
antac
..
Posté le 13-08-2007 à 10:08:17  profilanswer
 

Ton + sur ton code PHP est un opérateur d'adition pas de concaténation, remplace ca par un point ca marchera bien mieux


Message édité par antac le 13-08-2007 à 10:08:39
n°1598902
MagicBuzz
Posté le 13-08-2007 à 12:19:55  profilanswer
 

Je viens de regarder avec SQL Server et :
 

Code :
  1. SELECT 2007 + '-' + '8' + '-' + 13


Produit la même merde que sous MySQL.
Vu l'ordre des fallback, c'est dans une certaine mesure logique... Juste que '-' = 0, franchement je vois pas où celui qui a inventé ça est allé le chercher...
 
A noter que ceci ne marche avec aucun autre symbole (genre, c'est juste pour faire chier). Pour tous les autres symboles, il se produit ce qui devrait se produit systématiquement : cast error.
 
Par contre, SQL Server, contrairement aux bouses que sont MySQL et PHP, travaille avec des variables typées.
 
Ainsi :

Code :
  1. SELECT '2007' + '-' + '08' + '-' + '13'

donne le résultat escompté, à savoir '2007-08-13'.
 
Absolument normal, puisqu'il n'est à aucune moment nécessaire de changer de type puisque tous les éléments du "calcul" sont de type varchar.
 

Code :
  1. declare @dte AS varchar(10)
  2.  
  3. SELECT @dte = convert(varchar(10), getdate(), 103)
  4.  
  5. SELECT convert(varchar(25), getdate(), 113) "getdate",
  6. @dte "format_103",
  7. convert(datetime, substring(@dte, 7, 4) + '-' + substring(@dte, 4, 2) + '-' + substring(@dte, 1, 2), 120) "reconverti"


 

getdate                   format_103 reconverti
------------------------- ---------- -----------------------
13 août 2007 12:21:07:383 13/08/2007 2007-08-13 00:00:00.000
 
(1 ligne(s) affectée(s))


 
Bref, la première requête (au 2,2 près) devrait marcher si MySQL n'était pas la bouse infecte qu'il est.


Message édité par MagicBuzz le 13-08-2007 à 12:25:13

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

  Update d'un champ txt vers un champs date

 

Sujets relatifs
Macro Excel date et tableau croisé dynamiquePassage de variables d'un module vers un userform
Probleme de date pour flux RSS[VBA] champs texte et espaces
PROBLEME DE DATE LORS DE L'IMPORTATION SOUS EXCELinsertion donnée dans champs cles etrangère
champs un peu complexe à traiter dans requeteA L'AIDE!!! recuperer et comparer date et heure [VBA]
[SQL] PB requête avec datedéfi algorithme date
Plus de sujets relatifs à : Update d'un champ txt vers un champs date


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