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

Dividir 1 campo en dos campos

Estas en el tema de Dividir 1 campo en dos campos en el foro de Mysql en Foros del Web. Buenas tardes a la comunidad de programadores. mi problema es el siguiente: Tengo una base de datos, para una farmacia, ya lleva funcionando algun tiempo, ...
  #1 (permalink)  
Antiguo 08/08/2014, 14:41
 
Fecha de Ingreso: agosto-2014
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Dividir 1 campo en dos campos

Buenas tardes a la comunidad de programadores. mi problema es el siguiente:

Tengo una base de datos, para una farmacia, ya lleva funcionando algun tiempo, pero al momento de programarla lo hicieron mal, pues en el campo de medicamento, se coloco, el nombre y la cantidad separado por #. me explico

CAMPO MEDICAMENTO: pañal tena slip l # 90

Lo que se requiere ahora es que se pueda separar "pañal tena slip" de "# 90" para poder hacer operaciones con las cantidades, por ejemplo consolidados y demas.

si alguien tiene una respuesta agradezco de mil corazon su ayuda, es para el trabajo
  #2 (permalink)  
Antiguo 08/08/2014, 14:53
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, 4 meses
Puntos: 2658
Respuesta: Dividir 1 campo en dos campos

La pregunta principal: ¿Quieres corregir el defecto de la tabla, manteniendo los datos correctos en cada nueva columna, o lo que quieres es una forma de resolver la consulta, sin modificar esa "cosa"?
De acuerdo a lo que quieras hacer, será la respuesta...
__________________
¿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 13/08/2014, 12:54
 
Fecha de Ingreso: agosto-2014
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dividir 1 campo en dos campos

actualmente la base de datos, hay que campos que se llaman "medicamento 1" "medicamento 2" "medicamento 3" "medicamento 4" "medicamento 5" cuando se ingresan datos, en la base de datos, se hace ingresando el nombre del medicamento y la cantidad en el mismo separado por un "#" por ejemplo

medicamentos 1: urbadan 15 mg # 30

lo que necesito, es separar esos dos campos, en uno el nombre del medicamento y en el otro la cantidad.

con la particularidad, que el nombre del medicamento tiene que estar relacionado con la cantidad para despues poder consolidar.

y respondiendo a tu pregunta, si quiero corregir ese descuido en esa tabla.

soy nuevo en sql y es un trabajo para la empresa donde laboro,
si no es mucho atrevimiento si me podrias ayudar, para que no tenga que ingresarse el nombre del medicamentos, que este despeglable, en los campos Medicamentos "1,2,3,4,5

administro la base de datos desde el cliente mysql "NAVICAT PREMIUN"

de igual manera muchas gracias por tu pronta respuesta.

adjunto una foto para que me entiendas mejor, y cualquier recomendacion es bien recibida

ahhh.. todavia no puedo adjuntar archivos, espero que me hayas entendido.

si me puedes dar un correo para enviarte una foto, me dices

Última edición por DJMABAKER; 13/08/2014 a las 12:57 Razón: falto informacion
  #4 (permalink)  
Antiguo 13/08/2014, 13:31
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, 4 meses
Puntos: 2658
Respuesta: Dividir 1 campo en dos campos

Bueno, lo que te puedo proponer es esto:
1) Preventivamente, copia la tabla entera como respaldo:
Código MySQL:
Ver original
  1. CREATE TABLE nuevatabla LIKE tabla;
  2. INSERT INTO nuevatabla
  3. FROM tabla;
2) Agregale una columna a la tabla origen para almacenar la cantidad. La misma debe ser de tipo INT UNSIGNED, y podrías indicar DEFAULT '0', para que tome un valor desde el inicio, en el caso de altas de productos sin indicar cantidades.
Sería algo así:
Código MySQL:
Ver original 
3) Usando la función SUBSTRING_INDEX(), realiza esto:
Código MySQL:
Ver original
  1. SET cantidad = CAST(SUBSTRING_INDEX(medicamentos, '#', -1) AS UNSIGNED);
4) Realiza la misma tarea con el campo origen de esta forma:
Código MySQL:
Ver original
  1. SET cantidad = SUBSTRING_INDEX(medicamentos, '#', 1);
TE muestro cual es el funcionamiento de SUBSTRING_INDEX, con un ejemplo de un texto:
Código MySQL:
Ver original
  1. mysql> SELECT SUBSTRING_INDEX('medicamento # 12', '#', -1) valor;
  2. +-------+
  3. | valor |
  4. +-------+
  5. |  12   |
  6. +-------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> SELECT SUBSTRING_INDEX('medicamento # 12', '#', 1) valor;
  10. +--------------+
  11. | valor        |
  12. +--------------+
  13. | medicamento  |
  14. +--------------+
  15. 1 row in set (0.00 sec)
En tanto el contenido del registro sea "texto#numero", funcionará.
Obviamente, también funcionaría aplicándolo directamente sobre la consulta, por eso preguntaba cuál era la soluciona lograr. Pero es preferible corregir la tabla y no tener que recordar la funcion en cada una de las veces que debas hacer consultas... ¿no te parece?
Si algo te llega a fallar, siempre tendrás el respaldo de la tabla para restaurar, deshaciendo el agregado de la columna, por supuesto.
__________________
¿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 13/08/2014, 14:17
 
Fecha de Ingreso: agosto-2014
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dividir 1 campo en dos campos

gracias por tu pronta respuesta, me alegra mucho y me llena que compartas tu conocimiento.

no entiendo algo.

tu me dices que cree una nueva tabla, o que haga un respaldo de la misma.

me explico, que estas modificaciones las haga sobre la bd que tengo actualmente.

o para poderlas realizar hay que crear una nueva tabla

de nuevo muchas gracias
  #6 (permalink)  
Antiguo 13/08/2014, 14:47
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, 4 meses
Puntos: 2658
Respuesta: Dividir 1 campo en dos campos

La propuesta es por una regla de desarrollo básica: Jamás hagas algo que no puedas deshacer...
Como te dije al final:
Cita:
Si algo te llega a fallar, siempre tendrás el respaldo de la tabla para restaurar, deshaciendo el agregado de la columna, por supuesto.
Luego de comprobar de modo fehaciente que todo ande bien, eliminas la tabla de respaldo y listo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 13/08/2014, 15:27
 
Fecha de Ingreso: agosto-2014
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dividir 1 campo en dos campos

estoy editando en el mysql workbench y me aparece

y lo ingreso asi:
Código MySQL:
Ver original
  1. UPDATE TABLE bd entrega pendientes medicmed_copy ;
  2. SET cantidad = SUBSTRING_INDEX(MEDICAMENTO_NO_1 , '#', 1);

y me da este resultado

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'entrega pendientes medicmed_copy ADD COLUMN cantidad INT UNSIGNED NULL DEFAULT '' at line 1

Última edición por gnzsoloyo; 14/08/2014 a las 06:58
  #8 (permalink)  
Antiguo 13/08/2014, 16:27
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, 4 meses
Puntos: 2658
Respuesta: Dividir 1 campo en dos campos

La palabra TABLE está de más. Nunca hagas Copy+Paste.
Y el Workbench te lo debe estar marcando porque tiene corrector sintáctico integrado. Aprovechalo.

Por otro lado, veo que la denominacion de tu tabla en esa query expresa:
Cita:
bd entrega pendientes medicmed_copy
Así parece tener espacios intermedios, lo que generará sin dudas errores de sintaxis.
Los nombres de las tablas no deben tener:
1) Espacios intermedios.
2) Números al inicio del nombre.
3) Caracteres de uso reservado.
4) Palabras reservadas como nombre.

Finalmente, según dices el mensaje dice:
Cita:
to use near 'entrega pendientes medicmed_copy ADD COLUMN cantidad INT UNSIGNED NULL DEFAULT ''
Pero esa sintaxis no aparece en el código que nos meustras, por lo que sin duda pertenece a una query anterior en la ventana de ejecución... El problema lo tienes entonces en el ALTER TABLE, y no en el UPDATE (que de todos modos está mal escrito).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/08/2014 a las 07:02
  #9 (permalink)  
Antiguo 14/08/2014, 07:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Dividir 1 campo en dos campos

Una advertencia más. Aunque por lo que se refiere a la base de datos, el problema estará resuelto con lo que te ha dicho nuestro moderador @gnzsoloyo, te queda por reprogramar la carga de datos desde el formulario, pues ahora insertarás el medicamento en un campo y la cantidad en otro. Sin eso, seguirías cargando los datos futuros con ese formato que no deseas mantener...
  #10 (permalink)  
Antiguo 14/08/2014, 13:01
 
Fecha de Ingreso: agosto-2014
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dividir 1 campo en dos campos

ingreso de esta forma:

Código MySQL:
Ver original
  1. ALTER  bd entrega pendientes medicmed_copy ADD COLUMN cantidad INT UNSIGNED NULL DEFAULT '0';
  2. UPDATE bd entrega pendientes medicmed_Copy
  3. SET cantidad = CAST(SUBSTRING_INDEX(MEDICMENTO_NO_1, '#', -1) AS UNSIGNED);
y me sigue apareciendo este error

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'entrega pendientes medicmed_copy ADD COLUMN cantidad INT UNSIGNED NULL DEFAULT '' at line 1

muchas gracias por tu coloaboracion
  #11 (permalink)  
Antiguo 14/08/2014, 13:08
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, 4 meses
Puntos: 2658
Respuesta: Dividir 1 campo en dos campos

¿No ves que tienes espacios en blanco en el nombre de la tabla?
Ya te dije: El nombre de una tabla (o una base, columna, indice, stored procedure, o lo que sea), no puee tener espacios en blanco.
Nunca.

¿Por qué crees que en mi ejemplo puse como nombre "nuevatabla", y no "nueva tabla"?
__________________
¿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: campo, campos, dividir
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 21:43.