ultimos - Escapando carácter ypersand en SQL cadena
sql server split string delimiter (7)
Estoy intentando consultar una determinada fila por nombre en mi base de datos sql y tiene un ampersand. Traté de establecer un personaje de escape y luego escapar del signo y, por alguna razón, esto no funciona y no estoy seguro de cuál es exactamente mi problema.
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);
Aunque esto tiene una solución similar a esta pregunta , los problemas se plantean de manera muy diferente. Pueden terminar teniendo la misma solución, pero eso no significa que las preguntas sean las mismas.
En lugar de
node_name = ''Geometric Vectors /& Matrices''
utilizar
node_name = ''Geometric Vectors '' || chr(38) || '' Matrices''
38 es el código ascii para ampersand, y en esta forma se interpretará como una cadena, nada más. Lo intenté y funcionó.
Otra forma podría ser usar LIKE y un subrayado en lugar del carácter ''&'':
node_name LIKE ''Geometric Vectors _ Matrices''
La posibilidad de que encuentres otro disco también, que es diferente solo en este personaje, es bastante bajo.
Esto también funciona:
select * from mde_product where cfn = ''A3D"&"R01''
usted define &
como literal al adjuntar es con doble qoutes "&"
en la cadena.
Puedes usar
set define off
Usando esto no pedirá la entrada
directamente desde el libro de fundamentos Oracle sql
SET DEFINE OFF
select ''Coda & Sid'' from dual;
SET DEFINE ON
cómo uno podría escapar sin establecer definir.
Escape está establecido en /
por defecto , por lo que no necesita configurarlo; pero si lo haces, no lo envuelves entre comillas.
Ampersand es el marcador de variable de sustitución SQL * Plus; pero puede cambiarlo , o más útilmente en su caso, apáguelo completamente, con:
set define off
Entonces no necesita molestarse en escapar del valor en absoluto.
REPLACE(<your xml column>,''&'',chr(38)||''amp;'')
set escape on
... node_name = ''Geometric Vectors /& Matrices'' ...
o alternativamente:
set define off
... node_name = ''Geometric Vectors & Matrices'' ...
El primero le permite usar la barra invertida para escapar de &.
El segundo se apaga y "globalmente" (no es necesario agregar una barra invertida en ningún lugar). Puede volver a activarla set define off
y, a partir de esa línea, los signos y símbolos recuperarán su significado especial, por lo que puede desactivarlo para algunas partes del guión y no para otras.