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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Masque "littéral"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Masque "littéral"

n°1366325
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-05-2006 à 11:51:43  profilanswer
 

Salut,
 
J'ai un léger souci, je ne sais pas trop comment le résoudre simplement...
 
J'ai un champ qui contient par exemple :
 

OONN


 
Un second qui contient
 

_NO


 
Je veux comme résultat :
 

ONON


 
C'est à dire que je complète les trous du second avec les valeurs issues du premier, en respectant la position des caractères.
 
Je dois le faire en SQL directement (avec Oracle)
 
Je peux à la limite passer par une procédure PL/SQL, je me préfèrerais éviter...
 
Vous voyez une solution ?


Message édité par Arjuna le 15-05-2006 à 20:27:59
mood
Publicité
Posté le 15-05-2006 à 11:51:43  profilanswer
 

n°1366327
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-05-2006 à 11:53:08  profilanswer
 

Note: ici, j'ai 4 caractères. Seulement, il peut y avoir un nombre "indéfini" de caractères.
Deplus, la second valeur peut être null (vous focalisez pas dessus, c'est pas un problème) ou de taille inférieure à la première (idem, c'est pas vraiment un problème, ça peut toujours se résoudre à coup de NVL() et RPAD()

n°1366381
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-05-2006 à 12:56:31  profilanswer
 

J'aime bien causer dans le vide moi :o
 
Bon, j'ai pondu ça, c'est pas top mais bon, c'est mieux que rien...

Code :
  1. create or replace function get_rights(v_codsoc tie.codsoc%type, v_typtie tie.typtie%type, v_sigtie tie.sigtie%type)
  2. return varchar2
  3. is
  4.    i number;
  5.    ret varchar2(30);
  6.  
  7.    a varchar2(30);
  8.    b varchar2(30);
  9.  
  10. begin
  11.    i := 0;
  12.    select tbl.lib2, rpad(nvl(wt_right.rights, ' '), length(tbl.lib2))
  13.    into a, b
  14.    from wt_right, tbl, tie
  15.    where tie.codsoc = v_codsoc
  16.    and tie.typtie = v_typtie
  17.    and tie.sigtie = v_sigtie
  18.    and tbl.codsoc = tie.codsoc
  19.    and tbl.codtbl = '102'
  20.    and tbl.cletbl = substr(tie.typtie || tie.famtie, 1, 6)
  21.    and wt_right.codsoc(+) = tie.codsoc
  22.    and wt_right.typtie(+) = tie.typtie
  23.    and wt_right.sigtie(+) = tie.sigtie;
  24.  
  25.    while i < length(a)
  26.    loop
  27.       i := i + 1;
  28.   if substr(b, i, 1) = ' ' then
  29.     ret := ret || substr(a, i, 1);
  30.   else
  31.     ret := ret || substr(b, i, 1);
  32.   end if;
  33.    end loop;
  34.  
  35.    return ret;
  36. end;


Message édité par Arjuna le 15-05-2006 à 12:56:44
n°1366577
moonboot
Posté le 15-05-2006 à 15:48:09  profilanswer
 

J'ai ça pour toi mais je suis pas sûr que cela répond exactement à tes besoins.
Je l'ai fait rapidement mais l'esprit est là :
 

Code :
  1. declare
  2. a varchar2(30);
  3. b varchar2(30);
  4. c varchar2(30);
  5. d varchar2(30);
  6. e varchar2(30);
  7. begin
  8. a := 'OONN';
  9. b := ' NO  ';
  10. c := lpad (ltrim(b), length(b), a);
  11. d := substr(a,length(rtrim(c))+1,length(c)-length(rtrim(c)));
  12. e := rpad (rtrim(c), length(c), d);
  13. dbms_output.put_line( 'C : '||c);
  14. dbms_output.put_line( 'D : '||d);
  15. dbms_output.put_line( 'E : '||e);
  16. end;

n°1366580
moonboot
Posté le 15-05-2006 à 15:49:11  profilanswer
 

tu peux le faire en SQL sans problème mais ca va pas être super lisible à mon avis

n°1366905
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-05-2006 à 20:27:21  profilanswer
 

j'ai pas bien compris ce que fait ton truc.
 
je testerai ça demain.


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

  [SQL] Masque "littéral"

 

Sujets relatifs
[SQL SERVER] Copie de donnees d'une base a une autre[SAGE] Transformer un bon de commande en bon de livraison en SQL
Récuperer des selections en checkbox avec une requete SQL[Résolu] Passer une variable dans une requete SQL
recherche SQLTransfert de données depuis Access vers SQL server
Faire plusieurs requetes SQL dans un dataSet[PL/SQL]Variable de Session
Syntaxe PL/SQL 
Plus de sujets relatifs à : [SQL] Masque "littéral"


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)