update strings multiple into ejemplo data mysql replace backslash

strings - substr replace mysql



mysql: replace /(barra invertida) en cadenas (6)

Tengo el siguiente problema:

Tengo una tabla T que tiene una columna Nombre con nombres. Los nombres tienen la siguiente estructura:

A B C

Puedes crear en ti mismo así:

create table T ( Name varchar(10)); insert into T values (''A////B//C''); select * from T;

Ahora si hago esto:

select Name from T where Name = ''A//B/C'';

Eso no funciona, necesito escapar de la / (barra invertida):

select Name from T where Name = ''A////B//C'';

Multa.

¿Pero cómo hago esto automáticamente a un Nombre de cadena?

Algo como lo siguiente no lo hará:

select replace(''A//B/C'', ''//', ''////');

Me sale: A///BC

¿Alguna sugerencia?

Muchas gracias de antemano.


No estoy muy seguro de lo que quiere decir pero, esto debería funcionar.

select replace(''A//B/C'', ''/', ''//');

Básicamente va a reemplazar / dondequiera que se encuentre con // :)

¿Es esto lo que querías?


El literal A//B/C debe codificarse como A////A//C , y los parámetros de replace() deben escaparse:

select ''A////B//C'', replace(''A////B//C'', ''//', ''////');

salida (vea esto ejecutándose en SQLFiddle ):

A//B/C A////B//C


Entonces, no tiene mucho sentido usar reemplazar. Estas dos declaraciones son equivalentes:

select Name from T where Name = replace(''A////B//C'', ''//', ''////'); select Name from T where Name = ''A////B//C'';


El uso de expresiones regulares resolverá su problema.

Esta consulta a continuación resolverá el ejemplo dado.

1) S//D/B select * from T where Name REGEXP ''[A-Z]////////[A-Z]////[A-Z]$'';

si en caso el ejemplo dado podría tener más de un char

2) D//B/ACCC select * from T where Name REGEXP ''[A-Z]{1,5}////////[A-Z]{1,5}////[A-Z]{1,5}$'';

nota: he usado 5 como la ocurrencia máxima de char, considerando que el tamaño del campo es 10 como se menciona en la consulta create table.

Aún podemos generalizarlo. Si esto aún no ha cumplido sus expectativas, no dude en pedir mi ayuda.


Está confundiendo lo que está EN la base de datos con la forma en que representa esos datos en las declaraciones SQL. Cuando una cadena en la base de datos contiene un carácter especial como / , debe escribir // para representar ese carácter, porque / es un carácter especial en la sintaxis de SQL. Tienes que hacer esto en las INSERT , pero también debes hacerlo en los parámetros de la función REPLACE . En realidad, nunca hay doble barra en los datos, solo son parte de la IU.

¿Por qué crees que necesitas duplicar las barras en la expresión SQL? Si está escribiendo consultas, debe duplicar las barras en su línea de comando. Si está generando la consulta en un lenguaje de programación, la mejor solución es usar declaraciones preparadas; la API se encargará de la codificación adecuada (las declaraciones preparadas generalmente usan una interfaz binaria, que trata con los datos brutos). Si, por algún motivo, necesita realizar consultas mediante la construcción de cadenas, es de esperar que el lenguaje proporcione una función para escapar de la cadena. Por ejemplo, en PHP mysqli_real_escape_string .

Pero no puede hacerlo por SQL en sí mismo: si intenta alimentar a SQL la cadena no escapada, los datos se pierden y no puede reconstruirlos.


Podría usar LIKE :

SELECT NAME FROM T WHERE NAME LIKE ''%////%'';


Tienes que usar " cadena verbatim ". Después de usar esa cadena, tu función Reemplazar se verá así

Replace(@"/", @"//")

Espero que te ayude