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

crear campo haciendo una consulta

Estas en el tema de crear campo haciendo una consulta en el foro de Mysql en Foros del Web. buenas, tengo un campo en mi base de datos que es fecha_nacimiento, que es un varchar tipo: 17 de Enero de 2009. necesito extraer unicamente ...
  #1 (permalink)  
Antiguo 18/01/2010, 08:29
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
crear campo haciendo una consulta

buenas,

tengo un campo en mi base de datos que es fecha_nacimiento, que es un varchar tipo: 17 de Enero de 2009.

necesito extraer unicamente el año, y eso lo hago con php. me gustaria hacerlo sobre la marcha, es decir, necesito ejecutar la consulta y crear un 'campo' temporal con ese valor, y poder seleccionar todas las fechas de la base de datos igual a esa.

saludos!
  #2 (permalink)  
Antiguo 18/01/2010, 10:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: crear campo haciendo una consulta

Te sirve esto?

Código MySQL:
Ver original
  1. mysql> create table extraer_ano(fecha varchar(20));
  2. Query OK, 0 rows affected (0.20 sec)
  3.  
  4. mysql> insert into extraer_ano values('17 de Enero de 2009');
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> select fecha, right(fecha,4) ano from extraer_ano;
  8. +---------------------+------+
  9. | fecha               | ano  |
  10. +---------------------+------+
  11. | 17 de Enero de 2009 | 2009 |
  12. +---------------------+------+
  13. 1 row in set (0.02 sec)
  14.  
  15. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/01/2010, 10:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: crear campo haciendo una consulta

ferranweb,
lo primero es decirte que no deberías tener en una base de datos un campo de fecha_nacimiento con el formato 17 de Enero de 2009. Deberías procurar crear un nuevo campo de tipo DATE y trasladar los datos a él escribiéndolos con el formato 2009-01-17.
Podrías usar varios trucos para conseguirlo. Uno de ellos sería sustituir Enero por -01-
Febrero -02-
y así hasta diciembre por -12-
Luego eliminas todos los caracteres a, b, c, d, hasta z. y por supuesto los espacios en blanco, y te quedará 17-01-2009, 3-04-1984,
etc.
Luego podremos hacer un cambio mediante str_to_date() para obtener la fecha en el otro formato y pasarlo a un campo date. Si quieres ayuda podremos ofrecértela.

Pero volvamos a lo que pides: puedes, si siempre tienes el año al final, extraerlo así
SELECT SUBSTRING(fecha_nacimiento, -4) FROM tutabla
Esto te mostrará todos los años. Si vas a comparar con numéricos podríamos usar
SELECT CAST(SUBSTRING(fecha_nacimiento, -4) AS UNSIGNED) FROM tutabla

Edito: se me adelantó huesos52.

Última edición por jurena; 18/01/2010 a las 15:29
  #4 (permalink)  
Antiguo 18/01/2010, 17:19
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: crear campo haciendo una consulta

muy buenas, y gracias a los dos!!

despues de vuestras sabias explicaciones, puedo explicaros con detalle lo que me sucede.

programe mi web en su dia, sin pensar que pudiera tener mayor transcendencia. y en el registro de usuarios, para agiliar cree el campo fecha_nacimiento como os comentaba, varchar 18 de Enero de 1976.

hoy en dia, la cosa ha crecido bastante, y quiero crear una herramienta para las empresas registradas que quieren buscar dichos usuarios registrados.

para ello, he creado un buscador avanzado, donde las empresas pueden buscar por provincia, sexo, estudios... etc.... y claro, el campo importante es el de fecha.

hacia lo de extraer la fecha. pero el problema es que genero un SELECT segun las variables introducidas. y donde esta el problema, que si mando la variable en el select desplegable tipo:

WHERE fecha_nacimiento BETWEEN 25 AND 40... que seria lo ideal, no tengo en mi bd un campo varchar con el año. y como obtengo el reultado segun la variable, no se como hacerlooo!

1 opcion. hacer un update masivo y automatico, pasando uno por uno (pero de una vez y automatico) que me cree un campo mas que sea edad por ejemplo, con la fecha de cada uno.

2. o hacer sobre la marcha en el SELECT FROM.. WHERE sexo='$sexo' AND provincia='$provincia'... AND edad BETWEEN 25 AND 40...

que me sugeris compañeros!!!

saludos
  #5 (permalink)  
Antiguo 19/01/2010, 01:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: crear campo haciendo una consulta

Para saber la edad a partir de una fecha:
SELECT TIMESTAMPDIFF(YEAR,'1984-11-12',curdate()) edad

SELECT TIMESTAMPDIFF(YEAR,campofecha,curdate()) edad

Pero tendrás que convertir los datos que introduce en 1984-11-12 antes de incluirlo en la base, además claro de hacer la actualización.
  #6 (permalink)  
Antiguo 19/01/2010, 08:13
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: crear campo haciendo una consulta

jurena,

no acabo de entender lo que me dices! puedes explicarme mejor?

saludos
  #7 (permalink)  
Antiguo 19/01/2010, 08:22
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: crear campo haciendo una consulta

Lo que te quieren decir es que esto:
Cita:
17 de Enero de 2009
No es un formato de fecha válida para consultas en SQL.

Para que el dato de fecha se pueda analizar correctamente como una fecha debe tener forzosamente el formato "AAAA-MM-DD" y ser un DATE, DATETIME o TIMESTAMP, o bien un VARCHAR (no recomendable) pero ajustarse a una forma numérica estandarizada ("DD-MM-AAAA", "MM-DD-AAA" o la que sea, pero siempre la misma en todos los casos).

17 de Enero de 2009, no es, insisto, una fecha válida para análisis de consultas en bases de datos. Para serlo requiere que realices una conversión completa de todos los datos con este formato a un estándar válido. El problema que te enfrentas es de migración. Todo tipo de consultas a la base dependerá de la estandarización que logres...
__________________
¿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; 19/01/2010 a las 08:50 Razón: error ortográfico
  #8 (permalink)  
Antiguo 19/01/2010, 08:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: crear campo haciendo una consulta

ferranweb,
es como bien te ha aclarado gnzsoloyo.
Si tienes un campo en uno de esos tipos (para fecha de nacimiento te recomendaría DATE) y los datos guardados con el formato AAAA-MM-DD
podrás hacer una consulta como esta, por ponerte un ejemplo:
SELECT * FROM tutabla WHERE TIMESTAMPDIFF(YEAR,campofecha,curdate()) BETWEEN 25 AND 40
Pero tu problema, como bien te recuerdan es que debes hacer una migración. No es difícil, la verdad, y si quieres, podemos indicarte los pasos sin que corras demasiados riesgos. Eso puede hacerse en MySQL. Luego viene la parte en que necesitas modificar la programación para que a partir de ahora se incluyan los datos correctamente. Eso ya tienes que verlo en el foro de tu programa...

Etiquetas: campos
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 16:09.