2017-08-01 1 views

Répondre

0

Si vous voulez correspondre aux valeurs field_name contenant ' % & bla bla 2' , alors vous devez écrire ceci:

set define off 
Select * From Some_Table Where Field_Name Like '%bla\%bla&2%' escape '\'; 

vous obtenez de spécifier quel personnage vous voulez utiliser pour échapper à un personnage suivant (merci merci d'aller à mathguy, pas à moi). Vous devez également set define off pour empêcher sqlplus d'essayer de substituer des valeurs dans une chaîne.

Cependant, si vous voulez correspondre aux valeurs field_name que la chaîne donnée exactement égale, alors vous faites ceci:

set define off 
Select * From Some_Table Where Field_Name = 'bla%bla&2'; 
+0

Désolé, mais non, ce n'est pas comme ça que vous échappez à% dans la condition LIKE. Il est préférable de supprimer cette réponse incorrecte. quelqu'un l'a déjà surclassé, ce qui signifie qu'ils pensent que c'est correct. – mathguy

+0

@mathguy Désolé, mais oui. Cela fonctionne parce que je l'ai testé. – jeff6times7

+0

Désolé, mais cela signifie que vous ne savez pas non plus comment tester.Essayez ceci: 'sélectionnez 1 comme résultat de dual où 'yourstring' comme 'your %% string';' Selon vous, le jeu de résultats doit avoir zéro rangées, car la chaîne d'entrée n'a pas d'esperluette dedans. Mais en fait, il retourne une ligne avec la valeur 1 dans la colonne 'result'. – mathguy

0

Si je ne suis pas mistakend vous leur échapper avec une barre oblique inverse (\)

Select * From Some_Table Where Field_Name Like 'bla\%bla&2' ESCAPE '\'; 
+1

Vous devez ajouter 'ESCAPE '\'' après la condition 'LIKE' pour informer Oracle de ce que vous faites. Ce n'est pas automatique. – mathguy

+1

Ajout du commentaire de @ mathguy. Je pensais que c'était seulement quand vous deviez définir un caractère différent. – Juan

0

Utilisez échappement \ pour traiter est un littéral

SELECT * 
    FROM Some_Table 
WHERE Field_Name LIKE 'blah\%'|| 'blah' ||'&'|| '2'; 
+0

Vous devez ajouter 'ESCAPE '\'' après la condition 'LIKE' pour informer Oracle de ce que vous faites. Ce n'est pas automatique. – mathguy

+0

Je l'ai édité en utilisant || (pipes) à la place. –

+0

Cela peut fonctionner pour l'esperluette (je n'ai pas testé et je ne sais pas sur le dessus de ma tête si c'est le cas), mais je sais que cela ne fonctionnera pas pour cent. Le signe de pourcentage sera concaténé puis encore interprété comme un méta-caractère dans la condition LIKE. Escape est la bonne façon, il faut juste faire ... la bonne façon! – mathguy

0

Je vais deviner que vous utilisez un outil qui traite &n, où n est un chiffre, en tant que marqueur variable. Si vous utilisez SQL * Plus ou SQL Developer, vous devez exécuter la commande SQL * Plus SET DEFINE OFF. D'autres outils peuvent utiliser d'autres méthodes pour y parvenir.

Bonne chance.

+0

SQL \ * Plus traite n'importe quel élément de la forme '& z [...]' comme variable de substitution - ceci n'est pas limité uniquement aux chiffres. La solution est la bonne cependant. – mathguy

0

Je ne pense pas que le caractère d'échappement de barre oblique inversée fonctionnera ici pour l'esperluette. Au lieu de cela, vous voudrez diviser votre recherche en chaînes concaténées en utilisant des doubles tuyaux. Utilisez des guillemets simples autour de chaque morceau de texte littéral. Ensuite, remplacez le & par chr (38) qui est l'esperluette. Vous pouvez le voir avec:

select chr(38) from dual 

Vous voulez toujours inclure la barre oblique avant% et terminer votre déclaration à l'évasion « \ ». Remarquez, je n'ai pas cité le chr (38).

select * From Some_Table Where Field_Name Like 'bla\%bla'||chr(38)||'bla' escape '\' 
+0

Ceci est correct et cela fonctionnera, mais la requête est modifiée pour contourner un obstacle soulevé par le programme frontal (comme SQL \ * Plus). La meilleure solution, comme Bob Jarvis l'a montré dans sa réponse, est de dire au frontal de bien se comporter - en désactivant cette fonction dans la partie frontale elle-même. Nous ne pouvons pas torturer nos interrogations afin d'éviter toutes les bizarreries de tous les frontaux possibles; lorsque nous écrivons une requête, nous ne devrions avoir à nous soucier de SQL, pas d'autres choses. Cela dit, "bon travail" puisque la réponse est correcte. – mathguy

+0

Je n'ai jamais utilisé set define off. Je vais devoir ajouter celui-là à ma boîte à outils. – Andrew

+0

Il y a plus. Vous pouvez également définir le marqueur des variables de substitution sur un autre caractère (au lieu de &), plutôt que de désactiver cette fonctionnalité. Chaque solution a ses propres utilisations/applications. – mathguy