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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Concaténation complexe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Concaténation complexe

n°2370099
gwen2712
débutant SQL
Posté le 03-12-2020 à 09:43:44  profilanswer
 

Bonjour a tous,
Jai besoin de concaténé 3 valeur ensemble mais c'est assez complexe, je m'explique:
J'ai 2 tables old_ref et new_ref.
Dans old_ref j'ai des références noté comme ce la 10854854R  elle est composé du premier caractère(1) qui est l'unité de production, la référence de l'article(0854854) et d'une extension qui varie(R,S,T) qui n'est pas toujours présente.  
Dans new_ref j'ai la référence qui ce trouve dans old_ref(0854854) ainsi que celle qui va la remplacer écrite comme ceci(10056263)
Mon but est de remplacer la référence(0854854) par la nouvelle(10056263) tout en garder l'unité et l'extension qui va avec.
j'avais pensé a:

Code :
  1. UPDATE old_ref old
  2. JOIN new_ref new ON substring(old.ref,2,8)=new.ref
  3. set old.ref= concat(substring(old.ref,1,1),new.new_ref, substring(old.ref,9,9))
  4. where substring (old..ref,2,8) = new.ref;


Malheureusement l'extension n'est pas récupéré, auriez vous une idée?
 
 

mood
Publicité
Posté le 03-12-2020 à 09:43:44  profilanswer
 

n°2370177
rufo
Pas me confondre avec Lycos!
Posté le 03-12-2020 à 19:18:36  profilanswer
 

Je pense que tu devrais faire la jointure en faisant l'extraction de la référence via une regexp pour gérer le cas de la présence ou absence de la lettre de fin.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2370183
MaybeEijOr​Not
but someone at least
Posté le 03-12-2020 à 20:51:59  profilanswer
 

Pourquoi ne pas concaténer :
concat(left(old.ref, 1),new.new_ref,right(old.ref, 1))
where length(old.ref) > 8

 

Puis dans un deuxième temps :
concat(left(old.ref, 1),new.new_ref)
where length(old.ref) < 9

 

EDIT : et je ne suis pas habitué mais tu as le case/when/else pour faire tout en un.


Message édité par MaybeEijOrNot le 03-12-2020 à 20:53:57

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2371242
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-12-2020 à 17:50:01  profilanswer
 

Bonjour,

 

On est face à un souci purement lié au nom respect de la seconde règle de Codd : https://fr.wikipedia.org/wiki/12_r%C3%A8gles_de_Codd

 

Dans votre table old_ref vous ne devriez pas avoir 1 colonne, mais 3 colonnes.
Rien ne vous empêche ensuite, si votre SGBD supporte des colonnes calculées d'en créer une
https://docs.microsoft.com/fr-fr/sq [...] rver-ver15

 

Ou si votre SGBD ne les supporte pas, vous pouvez créer une simple vue.

 

Pour ce qui est de votre requête, vous n'étiez pas loin.
En revanche, vu votre syntaxe, vous n'étiez visiblement pas sur SQL Server, moi je le suis : l'ordre des éléments de la requête varie un peu.

 

Je préfère partir sur du left() et right() ainsi que sur len() car on n'est pas absolument certains que la longueur du code est fixe (la preuve, votre nouveau code fait un caractère de plus)

 
Code :
  1. UPDATE o
  2. SET ref = concat(LEFT(o.ref, 1), n.ref, RIGHT(o.ref, 1))
  3. FROM old_ref o
  4. INNER JOIN new_ref n ON n.old = substring(o.ref, 2, len(o.ref) - 2);


Message édité par Arjuna le 11-12-2020 à 17:51:41

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

  Concaténation complexe

 

Sujets relatifs
problème avec variable à contenu "complexe"concatenation de Label C++ builder
[Résolu] Problème Concaténationsupprimer plusieurs retours à la ligne
Transformer une chaine en nombre complexeConcatenation lignes
Idée Programation jeux video TRES COMPLEXECode complexe c++
Concatenation de caractères[Cobol] Concaténation de chaînes
Plus de sujets relatifs à : Concaténation complexe


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