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

Extraer parte de una fecha e insertarlo en otro campo

Estas en el tema de Extraer parte de una fecha e insertarlo en otro campo en el foro de Mysql en Foros del Web. Estimados, necesito extraer cierta parte de una fecha, el año, lo hago de la siguiente manera... (Mi campo fecha es tipo varchar en mysql) Código ...
  #1 (permalink)  
Antiguo 01/06/2013, 11:28
Avatar de Swab  
Fecha de Ingreso: agosto-2008
Ubicación: Chiloé
Mensajes: 92
Antigüedad: 15 años, 8 meses
Puntos: 5
Extraer parte de una fecha e insertarlo en otro campo

Estimados, necesito extraer cierta parte de una fecha, el año, lo hago de la siguiente manera... (Mi campo fecha es tipo varchar en mysql)

Código PHP:
SELECT SUBSTRING(fecha, -4FROM mi_tabla 
Pero neceito que esos años extraidos, son cientos... poder insertarlos en otro campo que he creado "soloano", que es para solo tener el año.
He hecho esto desde phpmyadmin

Código PHP:
UPDATE mi_tabla SET soloano 
(
SELECT SUBSTRING(fecha, -4FROM mi_tabla
pero me arroja el error " MySQL ha dicho: Documentación
#1093 - You can't specify target table 'decreto_e' for update in FROM clause "


Y buscando, googleando... no he podido dar con la solución, más bien no entiendo!.

Quizás han pasado por algo parecido y alguien puede ayudarme,
Saludos cordiales!
  #2 (permalink)  
Antiguo 01/06/2013, 11:37
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: Extraer parte de una fecha e insertarlo en otro campo

Cita:
Y buscando, googleando... no he podido dar con la solución, más bien no entiendo!.
¿Y cómo es posible que no lo entiendas?
AL menos creo que con el traductor de Google te quedaría claro que no puedes hacer un UPDATE a la misma tabla que usas en una subconsulta del WHERE del mismo UPDATE.
Simplemente, no puedes. MySQL no te lo permitirá, por cuestiones de estabilidad de procesos...

Adicionalmente, estás cometiendo dos errores: Uno estructural y uno conceptual.
1) Estructuralmente, no debes guardar una fecha en un VARCHAR, es es un error grave, que te traerá malas consecuencias a la performance y al diseño de consultas. Para eso existen los tipos DATE, DATETIME y TIMESTAMP.

2) Concepturalmente, lo que haces es redundancia de datos, porque si ya tienes ese dato en otro, no tiene sentido ni utilidad separar una parte de el para ponerlo en otro campo. Eso no sólo puede provocar inconsistencias en algún momento, sino que además por regla general no se guarda en campos información que se puede obtener en la misma consulta donde se use.

¿para qué quieres hacer eso?
__________________
¿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 01/06/2013, 14:25
Avatar de Swab  
Fecha de Ingreso: agosto-2008
Ubicación: Chiloé
Mensajes: 92
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: Extraer parte de una fecha e insertarlo en otro campo

Muchas gracias por todo Sr. Estoy haciendo un programa en vb.net y necesito validar que no ingresen un mismo número (solucionado) y que ese número no sea del mismo año, porque puede existir el mismo número, pero no el mismo año, por eso necesito el año de la fecha, ya que el número 05 pudo haber sido ingresado el 05/01/2012 y el 05 pudo ser ingresado el 07/01/2013 y así....
  #4 (permalink)  
Antiguo 08/06/2013, 10:32
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: Extraer parte de una fecha e insertarlo en otro campo

Hola Swab.

Segun como explicaste el caso en tu ultimo post, el problema radica en que debes definir bien cuales son los campos que quieres que se ingresen una sola vez y nada mas.

Al momento en que tengas definido cuales son los campos que se ingresan una sola vez, lo unico que tienes que hacer es decirle a la base de datos que dichos campos seran unicos, y dejas esa tediosa labor a la base de datos, quien se encargara de que esos valores sean unicos, y cuando quieran ingresar los mismos valores, simplemente arrojara un error.

Tomemos como ejemplo tu ultimo post. Si fuera el caso de que el numero 05 sea unico, simplemnte defines el campo en donde se almacena el numero 05 como unico, y luego le dejas la labor a la base de datos. La BD se encarga solita de hacerte la pega sin complicaciones. Asi, cuando quieran nuevamente ingresar el numero 05, no podran porque la BD les cobrara error.

Si por el contrario, deseas realizarlo como tu quieres hacerlo, lo que indica gnzsoloyo es lo mas correcto que deberias seguir.

Saludos
Max_mouse699

Etiquetas: campo, fecha, insert, parte, php, select, sql
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:48.