174 votes

Échapper au caractère esperluette dans une chaîne SQL

J'essaie d'interroger une certaine ligne par son nom dans ma base de données sql et elle contient une esperluette. J'ai essayé de définir un caractère d'échappement puis d'échapper à l'esperluette, mais pour une raison quelconque, cela ne fonctionne pas et je ne sais pas exactement quel est mon problème.

Set escape '\'
    select * from V1144engine.T_nodes where node_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id = 
      (select node_id from V1144engine.T_nodes where node_name = 'Geometric Vectors \& Matrices')))
    and edge_type_id = 1)
    and node_type_id = 1
    and node_id in (
    select node2_id from V1144engine.T_edges where node1_id =
      (select node_id from V1144engine.T_nodes where node_name = 'Algebra II')
    and edge_type_id = 2);

Bien que cette solution soit similaire à cette question les problèmes sont posés de manière très différente. Ils peuvent finir par avoir la même solution, mais cela ne signifie pas que les questions sont les mêmes.

4voto

David Balažic Points 88
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...

ou alternativement :

set define off
... node_name = 'Geometric Vectors & Matrices' ...

La première vous permet d'utiliser la barre oblique inversée pour échapper au &.

La seconde désactive & "globalement" (il n'est pas nécessaire d'ajouter une barre oblique inverse à un endroit quelconque). Vous pouvez l'activer à nouveau en set define on et à partir de cette ligne, les esperluettes retrouveront leur signification spéciale, de sorte que vous pouvez la désactiver pour certaines parties du script et pas pour d'autres.

1voto

copmac Points 37

Cela fonctionne également :

select * from mde_product where cfn = 'A3D"&"R01'

vous définissez & comme littéral en entourant is de doubles qoutes "&" dans la chaîne.

0voto

user6385350 Points 11
REPLACE(<your xml column>,'&',chr(38)||'amp;')

0voto

that_roy Points 25

J'ai écrit une regex pour aider à trouver et remplacer "&" dans un INSERT, j'espère que cela aidera quelqu'un.

L'astuce était de s'assurer que le "&" était avec un autre texte.

Trouvez “(\'[^\']*(?=\&))(\&)([^\']*\')”

Remplacer “$1' || chr(38) || '$3”

0voto

Mohan Reddy Points 9
--SUBSTITUTION VARIABLES
-- these variables are used to store values TEMPorarily.
-- The values can be stored temporarily through
-- Single Ampersand (&)
-- Double Ampersand(&&)
-- The single ampersand substitution variable applies for each instance when the
--SQL statement is created or executed.
-- The double ampersand substitution variable is applied for all instances until
--that SQL statement is existing.
INSERT INTO Student (Stud_id, First_Name, Last_Name, Dob, Fees, Gender)
VALUES (&stud_Id, '&First_Name' ,'&Last_Name', '&Dob', &fees, '&Gender');
--Using double ampersand substitution variable
INSERT INTO Student (Stud_id,First_Name, Last_Name,Dob,Fees,Gender)
VALUES (&stud_Id, '&First_Name' ,'&Last_Name', '&Dob', &&fees,'&gender');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X