Question

J'ai deux tableaux avec plusieurs colonnes.Maintenant, je veux les fusionner en utilisant comme opérateur.Mon code est comme suit

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where a.zip_c like ('%b.zip_extract%')

;
quit;

Je reçois des messages de saut de page et aucun résultat n'est renvoyé.Le type de colonne pour a.zip_c est Char et la longueur est de 50 tandis que pour b.zip_extract son Char a une longueur de 6.

Était-ce utile?

La solution

Fusionner sur like ce n'est pas une bonne idée ;il n'utilise pas d'index et n'utilise pas beaucoup d'optimisations que vous obtenez autrement.Cependant, c'est parfois nécessaire.

En SAS, cependant, je ferais cela différemment [et dans la plupart des autres SQL...]

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where find(a.zip_c,b.zip_extract)
;

quit;

Cela accomplit la même chose que LIKE, mais est plus susceptible de permettre à SAS d'utiliser des indices et des optimisations, et est écrit plus clairement.

Pour résoudre d'éventuels problèmes de longueur de colonne, utilisez TRIM :

data have_a;
 length zip_c $50;
 input @1 zip_c $50.;
 datalines;
12345 99999
67890 99999
88001 99999
37013 99999
60037 99999
;;;;
run;

data have_b;
 length zip_extract $7;
 input zip_extract $;
 datalines;
12345
37013
99998
;;;;
run;

proc sql;
  title "No Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,b.zip_extract)
;

quit;
proc sql;
  title "Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,trim(b.zip_extract))
;

quit;

Autres conseils

Le problème est que vous correspondez à la chaîne, b.zip_extract, pas la colonne.

Essayez:

select a.*,b.*
from tera.SFTP as a,home.SFTP_1 as b
where a.zip_c like '%' || b.zip_extract || '%'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top