Update d'un champ txt vers un champs date

Update d'un champ txt vers un champs date - SQL/NoSQL - Programmation

Marsh Posté le 09-08-2007 à 20:37:36    

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
Reply

Marsh Posté le 09-08-2007 à 20:37:36   

Reply

Marsh Posté le 10-08-2007 à 08:34:17    

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

Reply

Marsh Posté le 10-08-2007 à 09:36:08    

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
Reply

Marsh Posté le 10-08-2007 à 13:28:43    

Merci, la requête fonctionne parfaitement.

Reply

Marsh Posté le 10-08-2007 à 16:22:00    

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

Reply

Marsh Posté le 10-08-2007 à 16:37:29    

concat_ws

Reply

Marsh Posté le 10-08-2007 à 16:40:32    

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
Reply

Marsh Posté le 10-08-2007 à 16:43:33    

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
Reply

Marsh Posté le 10-08-2007 à 16:55:47    

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
Reply

Marsh Posté le 10-08-2007 à 17:05:05    

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 !

Reply

Marsh Posté le 10-08-2007 à 17:05:05   

Reply

Marsh Posté le 11-08-2007 à 11:49:25    

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

Reply

Marsh Posté le 11-08-2007 à 12:11:30    

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
Reply

Marsh Posté le 11-08-2007 à 21:00:37    

'-' é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.

Reply

Marsh Posté le 12-08-2007 à 09:53:42    

Marrant ça :
 

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

Reply

Marsh Posté le 13-08-2007 à 09:28:53    

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:

Reply

Marsh Posté le 13-08-2007 à 10:08:17    

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
Reply

Marsh Posté le 13-08-2007 à 12:19:55    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed