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

Separar cadena

Estas en el tema de Separar cadena en el foro de Mysql en Foros del Web. hola amigos, tengo un campo varchar(1000) el cual esta separado por comas, mediante una consulta necesito entregarlos separado por espacios CAMPO NN,AAAU,29,000000,0000145283,5511,1,0138,000113...
  #1 (permalink)  
Antiguo 28/08/2015, 07:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Separar cadena

hola amigos, tengo un campo varchar(1000) el cual esta separado por comas, mediante una consulta necesito entregarlos separado por espacios

CAMPO
NN,AAAU,29,000000,0000145283,5511,1,0138,000113
  #2 (permalink)  
Antiguo 28/08/2015, 07:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Separar cadena

Pues usa la función REPLACE()...

Es algo para que mires el manual de referencia.

https://dev.mysql.com/doc/refman/5.6...functions.html

Nota Bene: Eso que tienes es lo que se denomina "campo multivaluado", y estás prohibidos en el modelo relacional. Es un defecto de diseño grave.

¿Eso lo tienes claro, no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/08/2015, 07:50
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Separar cadena

gnzsoloyo, gracias por responder

Esta es mi consulta pero no me funciona

Código SQL:
Ver original
  1. SELECT DATE_FORMAT(TIMESTAMP,'%Y/%m/%d %H:%i:%s'), REPLACE(raw_record,',',' ') FROM DATA WHERE id = 200 INTO OUTFILE '/tmp/archvio.raw' FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n';

Esta es la salida, me falta el espacio en blanco

2014/09/04\ 10:28:01 RN\ LAGU\ 29\ 000000\ 0000145283\ 5511\ 1\ 0138\ 000113

gracias por indicarme lo del campo multivaluado, osea que cada posicion deberia guardarse en una columna?

Última edición por Montes28; 28/08/2015 a las 08:01
  #4 (permalink)  
Antiguo 28/08/2015, 08:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Separar cadena

Código MySQL:
Ver original
  1. DATE_FORMAT(TIMESTAMP,'%Y/%m/%d  %H:%i:%s'),
  2. raw_record REPLACE('raw_record',',',' ')
  3. FROM DATA WHERE id = 200
  4. INTO OUTFILE '/tmp/aguas_calientes.raw'
Una observación:
Tienes un severo error sintáctico en la función, porque espera tres parametros, de los cuales la primera debería ser una columna, y no una cadena de texto denominada "raw_record".

Cita:
gracias por indicarme lo del campo multivaluado, osea que cada posicion deberia guardarse en una columna?
Exactamente.
Es totalmente irrelevante el cómo obtienes los datos, de qué origen o por qué está asi, en la base de datos deben ser normalizados si o si.
Yo he tenido cientos de casos donde me pasan basura como esa, pero es mi responsabilidad profesional asegurarme que la base de datos esté bien diseñada, y la informacion se inserte normalizada.
Si meto basura, sólo obtendré datos basura, o tendré que ahcer malabares como los que estás haciendo ahora... que se podrían evitar sin problemas con los datos bien almacenados.,
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/08/2015, 08:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Separar cadena

gnzsoloyo como coloco el espacio en blanco?

Código SQL:
Ver original
  1. SELECT DATE_FORMAT(TIMESTAMP,'%Y/%m/%d %H:%i:%s'), REPLACE(raw_record,',','') FROM DATA WHERE id = 200 INTO OUTFILE '/tmp/archivo.raw' FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n';
  #6 (permalink)  
Antiguo 28/08/2015, 09:24
Avatar de David_Carrera_G  
Fecha de Ingreso: noviembre-2014
Ubicación: Santiago
Mensajes: 37
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Separar cadena

Cita:
Iniciado por Montes28 Ver Mensaje
gnzsoloyo como coloco el espacio en blanco?

Código SQL:
Ver original
  1. SELECT DATE_FORMAT(TIMESTAMP,'%Y/%m/%d %H:%i:%s'), REPLACE(raw_record,',','') FROM DATA WHERE id = 200 INTO OUTFILE '/tmp/archivo.raw' FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n';
Estimado, tu error esta a la vista, solo tienes que leer el articulo que te indico el master gnzsoloyo y buscar la función REPLACE(). Vamos broh es complicado al principio pero poco a poco se suelta la mano.
__________________
David Carrera González
Santiago de Chile
Analista de base de datos
  #7 (permalink)  
Antiguo 28/08/2015, 09:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Separar cadena

David_Carrera_G gracias por responder.

Código SQL:
Ver original
  1. SELECT DATE_FORMAT(TIMESTAMP,'%Y/%m/%d %H:%i:%s'), REPLACE(raw_record,',',' ') FROM DATA WHERE id = 200 INTO OUTFILE '/tmp/aguas_calientes2.raw' FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n';

obtengo:
2014/09/04\ 10:28:01 RN\ LAGU\ 29\ 000000\ 0000145283\ 5511\ 1\ 0138\ 000113

en lugar de los espacios en blanco coloca \ (estoy utilizando linux)
  #8 (permalink)  
Antiguo 28/08/2015, 10:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Separar cadena

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->          DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') fecha,
  3.     ->  REPLACE('NN,AAAU,29,000000,0000145283,5511,1,0138,000113',',',' ') raw_record;
  4. +---------------------+-------------------------------------------------+
  5. | fecha               | raw_record                                      |
  6. +---------------------+-------------------------------------------------+
  7. | 2015/08/28 13:59:29 | NN AAAU 29 000000 0000145283 5511 1 0138 000113 |
  8. +---------------------+-------------------------------------------------+
  9. 1 row in set (0.00 sec)
Pues obviamente es un problema en la generación del archivo plano en Linux, y no propio de MySQL...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cadena, campo
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 05:20.