Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Como modificar varias tuplas de cadena parecida a la vez...

Estas en el tema de Como modificar varias tuplas de cadena parecida a la vez... en el foro de PostgreSQL en Foros del Web. Buenas foro, una sencillita: Supongamos que tenemos las siguientes tuplas de un campo determinado: Cita: Atom H é art Mother (version normal) Atom H é ...
  #1 (permalink)  
Antiguo 08/03/2009, 05:57
Avatar de nekcab  
Fecha de Ingreso: noviembre-2004
Mensajes: 223
Antigüedad: 19 años, 5 meses
Puntos: 0
Como modificar varias tuplas de cadena parecida a la vez...

Buenas foro, una sencillita:

Supongamos que tenemos las siguientes tuplas de un campo determinado:
Cita:
Atom Héart Mother (version normal)
Atom Héart Mother (version en directo)
Atom Héart Mother (version Bootleg)
Y deseemos efectuar una sustitución justo en la parte de la cadena que es común en todas, dejándola como:
Atom Heart Mother ....

De modo que, mediante "UPDATE" quedara:
Cita:
Atom Heart Mother (version normal)
Atom Heart Mother (version en directo)
Atom Heart Mother (version Bootleg)
Gracias al inestimable "LIKE" se pueden hacer búsquedas generales, pero el comodín "%" solo me ha sido válido cuando efectúo búsquedas, ¿pero es el mismo comodín para efectuar modificaciones a conjuntos de tuplas?.
Cita:
update musica
set album ???? 'Atom Heart Mother%'
..................^...................................^
..................|....................................|
[¿cual operador usar?]
...[¿valdría el % aquí?]

where album
like 'Atom Héart Mother%';
Gracias por leerme.

Última edición por nekcab; 08/03/2009 a las 07:15
  #2 (permalink)  
Antiguo 09/03/2009, 04:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Puedes utilizar las funciones de cadenas que te brinda postgresql.
http://www.postgresql.org/docs/8.3/i...ns-string.html
Con un replace podrias hacer lo que quieres.

Salu2
  #3 (permalink)  
Antiguo 14/03/2009, 05:39
Avatar de nekcab  
Fecha de Ingreso: noviembre-2004
Mensajes: 223
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Tras leerme el doc.q adjuntaste y pelearme un poquillo cn la función REPLACE (por cierto, se utiliza dentro de la orden UPDATE, q hasta que encontré un ejemplo.....) me surgen 3 dudas:

A.- Teóricamente lo q se encuentra contenido dentro del paréntesis sería:
Cita:
('cadena DONDE se encuentra','cadena A sustituir','cadena QUE sustituye')
Adjunto lo que indica el manual (tanto el de la Web como el que viene en la propia instalación PostgreSQL):
Cita:
Función: "replace(string text, from text, to text)"
Descripción: "Replace all occurrences in string of substring from with substring to"
Ejemplo: "replace('abcdefabcdef', 'cd', 'XX')"
Resultado: "abXXefabXXef"
Y el caso es que he probado:
Cita:
update musica set artist=replace('','♀','ñ')
Y .... me ha borrado todo lo que contenía el campo ARTIST ( quien dice borrado, dice añadido en TODOS el campo específicado, la cadena indicada en la primera parte del paréntesis ).

¿No se supone que la 1ª parte del paréntesis se trata de la cadena DONDE localizar el texto A sustituir?

B.- Luego: si quiero que la búsqueda no se acote a dicha cadena de caracteres, sino que afecte a TODO el campo que especifico: ¿como se pone dicha orden?

C.- O por ejemplo: ¿¿¿Y si quiero, como dije en la pregunta inicial, que el cambio se produzca una posición después/antes de dicha: cadena ???

Nuevamente, gracias por echarme un cable.

Última edición por nekcab; 14/03/2009 a las 07:34
  #4 (permalink)  
Antiguo 14/03/2009, 15:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Cita:
Iniciado por nekcab Ver Mensaje
Tras leerme el doc.q adjuntaste y pelearme un poquillo cn la función REPLACE (por cierto, se utiliza dentro de la orden UPDATE, q hasta que encontré un ejemplo.....) me surgen 3 dudas:

A.- Teóricamente lo q se encuentra contenido dentro del paréntesis sería:

Adjunto lo que indica el manual (tanto el de la Web como el que viene en la propia instalación PostgreSQL):

Y el caso es que he probado:

Y .... me ha borrado todo lo que contenía el campo ARTIST ( quien dice borrado, dice añadido en TODOS el campo específicado, la cadena indicada en la primera parte del paréntesis ).

¿No se supone que la 1ª parte del paréntesis se trata de la cadena DONDE localizar el texto A sustituir?
Correcto

Cita:
B.- Luego: si quiero que la búsqueda no se acote a dicha cadena de caracteres, sino que afecte a TODO el campo que especifico: ¿como se pone dicha orden?
update musica set artist=replace(artist,'♀','ñ')


Cita:
C.- O por ejemplo: ¿¿¿Y si quiero, como dije en la pregunta inicial, que el cambio se produzca una posición después/antes de dicha: cadena ???

Nuevamente, gracias por echarme un cable.
Entonces no sería reemplazar, seria concatenar!

Salu2

Última edición por seyko; 18/03/2009 a las 03:41
  #5 (permalink)  
Antiguo 15/03/2009, 14:23
Avatar de nekcab  
Fecha de Ingreso: noviembre-2004
Mensajes: 223
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

OK, centrémonos primero en el punto A:

Dices que es correcto que la 1ª parte del paréntesis es la "cadena A buscar". Bien, entonces:

¿Pq cuando pongo (siguiendo tu ejemplo) "artist" en la 1ª parte, lo que me hace es literalmente machacar el contenido de todas las tuplas en el campo ARTIST y agregar "artist" en TODAS ellas. SIN excepción, en todas las tuplas de dicho campo.

P.D.: para aclararme. Si debido a un error de exportación / importación de datos requiero corregir un carácter en una cadena determinada:
Cita:
update musica set album=replace('Wish You ere Here','♀','W')
-busca en todas las tuplas del campo ALBUM
-y en aquellas que incluyan la cadena "Wish You ere Here"
-elimina el carácter "♀"
-y lo sustituye por "W". ¿No?

Última edición por nekcab; 15/03/2009 a las 14:32
  #6 (permalink)  
Antiguo 16/03/2009, 02:59
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

No!
REPLACE(cadena, cadena_buscar, cadena_cambiar) es una funcion, que reemplaza en "cadena", cadena_buscar por cadena_cambiar.
Si lo que quieres cambiar no existe en "cadena", devuelve "cadena" sin cambiar nada.
Si le pasas una cadena vacia, como hacias al principio, le estas diciendo cambiarme en una cadena vacia un caracter por otro => returna ''
Si quieres cambiar solo en los artistas en los que coincida utiliza la clausula WHERE.

Código:
update musica
set artista = replace (....)
where artista like '%coincicida%'
Salu2
  #7 (permalink)  
Antiguo 17/03/2009, 13:20
Avatar de nekcab  
Fecha de Ingreso: noviembre-2004
Mensajes: 223
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Tras pelearme con la claúsula WHERE, no avanzo mucho. Pongo línea a ejecutar:
Cita:
update musica
set artista = replace ('Atom Hêart Mother (version ','é','e')
where artista like 'Atom Hêart Mother (version %'
y como siempre: me machaca todo aquello que se salga del:
"Atom Heart Mother (version "

y como puse en el primer ejemplo, el resto de variantes:
Cita:
Atom Heart Mother (version normal)
Atom Heart Mother (version en directo)
Atom Heart Mother (version Bootleg)
se quedan reducidas al simple:
"Atom Heart Mother (version "

Y es que, si, efectivamente, me reemplaza el "ê" por "e" pero, también quiero que respete el resto de la cadena que NO es común. Y nada, no hay manera, me ha machacado cualquier tupla que empieze con: "Atom Heart Mother (version ", tanto si era:
Atom Heart Mother (version normal)

como si era:
Atom Heart Mother (version en directo)

o bien:
Atom Heart Mother (version Bootleg)

para dicho comando todo es lo mismo y se queda reducido a la parte común:
"Atom Heart Mother (version "

machacando lo que viene a continuación. No sé que me dejo en el tintero, diosss....

P.D.: solo quiero eso, que sustituya el carácter: ê por una "e" normal de toda la vida. En este ejemplo -que se parece mucho a una errata de mi B.D.-
  #8 (permalink)  
Antiguo 18/03/2009, 03:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Vamos a ver si nos enteramos:
set artista = replace ('Atom Hêart Mother (version ','é','e')

Estas diciendo que reemplace en ('Atom Hêart Mother (version la é por una e.

Eso devuelve el replace, ahora le dices que en artista te guarde lo que devuelve el replace, ahora vuelve a leerte el post despacito, porque ya te he contestado como hacerlo antes.

Salu2
  #9 (permalink)  
Antiguo 18/03/2009, 05:21
Avatar de nekcab  
Fecha de Ingreso: noviembre-2004
Mensajes: 223
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

Tenías razón, me estaba ajustando al aptdo. A cuando me diste la clave en el punto B:
Cita:
update musica set artist=replace($FIELD,'ê','e')
Indicando un campo directamente (sin comillas) permite sustituir solo la ê, en todas las tuplas de dicho campo, ( o bien en las tuplas que respondan al filtrado que indiqueis con WHERE ). Pero, eso sí, sustituye TODAS las ê sin excepción (mi inicial intención)

Entiendo que el hecho de especificar una cadena concreta en la 1ª coma es para aquellos casos en los que solo queremos cambiar, p.e., la ê pero SOLO cuando ésta se encuentre en un contexto muy determinado. P.e.:
-sustituya dicha 'ê' SOLO en cadenas: "Crêtacico Superior"
-pero no toque para nada: "Crêtacico Inferior"

[EDITO]
Yo no sé que ha pasado hoy, pero ya no me hace las virgerías que me hacía en días pasados. P.e., bien puedo cambiar absolutamente todas las "ê", como también aquellas "ê" que se encuentren en un determinado contexto muy concreto (p.e.: rodeado de "cr" y posteriormente de "tacico") sin machacar nada del resto. Debía estar haciendo algo mal (ni idea, pero juraría que escribía lo mismo que lo q hoy me da resultado).

No hace falta introducir una cadena determinada en la 1ª coma, basta con que:
-1ª coma: el campo afectado
-2ª coma: el carácter a sust. (y si queremos que sea en función de una cadena determinada, pues dicha cadena)
-3ª coma: idem pero con el carácter correcto ( y el resto de la cadena si queremos acotar en función del contexto deseado)
-WHERE: especificando la misma cadena incluída en la 2ª coma.

Gracias Seiko por la paciencia... Y de verdad, siento haber sido "algo" pesado.

Última edición por nekcab; 19/03/2009 a las 12:46
  #10 (permalink)  
Antiguo 23/03/2009, 08:53
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Como modificar varias tuplas de cadena parecida a la vez...

De nada nekcab, si ya funciona me doy por satisfecho!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:23.