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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Remplacer des / par des - sans perdre la valeur dans le champs via SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer des / par des - sans perdre la valeur dans le champs via SQL

n°1797665
stiffle
Je suis donc .... Je suis.
Posté le 09-10-2008 à 11:57:19  profilanswer
 

Bonjour à tous,
 
Voila, je rencontre un petit souci dans une base de donnée postgréSQL. Je cherche a remplacer la valeur d'un champ date au format  
jj/mm/aaaa par du jj-mm-aaaa
 
J'ai aujourd'hui 476 lignes renseignées avec des dates et du format jj/mm/aaaa, je ne peux absolument pas perdre les dates renseignées et je dois faire cette modification remplacer des / par des -.
 
Pour l'instant, j'ai isolé toutes mes demandes fermées (poids =90) pour pouvoir faire cette manip, mais je ne vois absolument pas comment faire le remplacement de toutes mes lignes qui possèdent une date de renseigné en tout j'ai 235 lignes qui sont sortie avec une date connue.
 
Comment je peux faire pour modifier ces 235 lignes qui possèdent une date connue et modifier par exemple la date  du 08/10/2008 par 08-10-2008 et ce pour toutes mes lignes?
 
Voici ma requete de recherche:
SELECT id, bug_id, reporter_id, status, summary, field_id, "value"
 FROM bug_table
  INNER JOIN custom_field_string_table on custom_field_string_table.bug_id = bug_table.id
        WHERE status like '90' and field_id like '177' and "value" not like 'jj/mm/aaaa'

 
J'espère avoir été clair sur mon explication,
 
Je ne sais pas comment construire ma requete update et je ne me vois pas faire cela a la main.
Avez-vous une idée?
 
D'avance merci,

mood
Publicité
Posté le 09-10-2008 à 11:57:19  profilanswer
 

n°1797669
casimimir
Posté le 09-10-2008 à 12:04:42  profilanswer
 

faire une procédure stockée qui te renvoie un flag si ta chaine est une date valide ou pas, appeler cette procédure dans le where de ton update, et faire un replace sur les lignes retenues.
 
on est bien d'accord que tes dates sont dans une colonne de type caractère?
 
le bon truc au final reste de transformer ta colonne en format date.

n°1797674
stiffle
Je suis donc .... Je suis.
Posté le 09-10-2008 à 12:13:00  profilanswer
 

Merci de ta réponse,
 
Je n'ai jamais constuit de procédure stockée. je vais chercher un peu pour trouver comment en construire
Merci pour cette info.
On est d'accord cette colonne  est de type caractère.

n°1797685
olivthill
Posté le 09-10-2008 à 12:33:48  profilanswer
 

En Oracle, il serait facile de faire cela en convertissant dd/mm/yyyy en une date, et en convertissant cette-dernière en dd-mm-yyyy.

select to_char(to_date(champ_date, 'dd/mm/yyyy'), 'dd-mm-yyyy')

Peut-être qu'il serait posible de faire quelque chose d'équivalent en Postgres.

n°1797697
casimimir
Posté le 09-10-2008 à 13:31:50  profilanswer
 

le seul soucis avec ca c'est que pour les dates non valides cela va générer une exception et donc faire foirer l'update, c'est pour ca qu'il faut passer par une procédure stockée, catcher l'exception, et renvoyer une valeur qui permet de le savoir.
 
y a ptetre moyen de faire autrement en postgres mais je suis pur oracle :/
 
mais bon perso je me suis fait une fonction is_date_valid(str varchar2,mask varchar2) return date qui retourne null si le cast n'est pas possible

n°1797747
stiffle
Je suis donc .... Je suis.
Posté le 09-10-2008 à 14:18:24  profilanswer
 

Le souci c'est que je dois garder toute mes dates renseignées et liées avec un id
ex: id 753 le champ value = 25/05/2008
     id 754 le champ value = 26/06/2008
Comment je pourrais faire pour associé toujours a l'id en question et en même temps modifier le value?  
    id 753 le champ value = 25-05-2008 et faire cela sur 235 lignes enregistrées?
Passer par un import via txt
 
Je n'ai pas trouvé d'explication simple pour créer une procédure stockée. Savez-vous s'il existe un tutau ? pour apprendre vite genre 1 heure?
 
Merci

n°1797780
MagicBuzz
Posté le 09-10-2008 à 15:00:49  profilanswer
 

2 questions :
 
1/ c'est du one shot ?
2/ toutes les valeurs de date sont des dates valides ou nulles ?
 
si tu dis 2 fois "oui", alors :
 

Code :
  1. UPDATE <latable>
  2. SET ladate = REPLACE(ladate, '/', '-');


 
Avec le détail de la structure de tes deux tables (ou au moins une requête select correctement écrite avec des préfixes devant les champs qu'on sâche d'où ils viennent) et on peut même te proposer la requête complète et fonctionnelle.
 
PS : oui, je sais, le REPLACE est de loin la solution la plus cadre, puisqu'il ne fait aucune vérification, d'où les deux questions préliminaires. si elles sont respectées, alors ça vaut clairement pas le coup de s'emmerder à faire des contrôles par contre.


Message édité par MagicBuzz le 09-10-2008 à 15:00:55
n°1797824
stiffle
Je suis donc .... Je suis.
Posté le 09-10-2008 à 15:50:17  profilanswer
 

Voici ce que j'ai fais et ton exemple reprend exactement la même chose:
 
J'ai fais une recherche de tout mes id présents  
 
SELECT id, bug_id, status, field_id, "value"
 FROM bug_table
  INNER JOIN custom_field_string_table on custom_field_string_table.bug_id = bug_table.id
        WHERE status like '90'  
                       and field_id in ('177','178')  
                             and "value" not like 'jj/mm/aaaa'  
                                             order by field_id ASC;
 
En suite j'ai copié le resultat des bug_id et j'ai fais cette requete :
 
UPDATE custom_field_string_table  
         set "value"=replace("value",'/','-')
                     where bug_id in ('1543','1192','1470','346','347','281','1382')
and field_id in ('177','178')
 
Et tout s'est bien passé.
 
Merci pour votre aide et j'espère que cela pourra aider d'autres personnes.
 
Bonne journée a tous,
 
Merci


Message édité par stiffle le 09-10-2008 à 15:50:32

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

  Remplacer des / par des - sans perdre la valeur dans le champs via SQL

 

Sujets relatifs
[Struts] Formulaire avec nombre de champs variable[SQL] Erreur syntaxe [RESOLU]
Stockaeg d'IP dans BD SQL légal ?Requêtes SQL dans Excel et variable dans la feuille
[WSH] Resultat de commande, remplacer le DelimsCopie des données d'une table de SQL Server vers une table de MySQL
Regex et séparateur de champsRemplacer une chaine de charactères
Requete SQL avec GROUP BY probleme[Excel] Afficher une cellule comportant une valeur calculée
Plus de sujets relatifs à : Remplacer des / par des - sans perdre la valeur dans le champs via SQL


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