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

Seleccionar los que hoy cumplen años

Estas en el tema de Seleccionar los que hoy cumplen años en el foro de Mysql en Foros del Web. Hola gente, alguien tiene idea de como yo puedo filtrar los registros de “personas” que cumple años hoy (fecha actual de sistema) a partir de ...
  #1 (permalink)  
Antiguo 11/05/2008, 11:04
Avatar de maderic_m  
Fecha de Ingreso: agosto-2007
Mensajes: 53
Antigüedad: 17 años, 2 meses
Puntos: 0
Seleccionar los que hoy cumplen años

Hola gente, alguien tiene idea de como yo puedo filtrar los registros de “personas” que cumple años hoy (fecha actual de sistema) a partir de la fecha de nacimiento. Yo debería tomar el campo fecha de nacimiento y CURRENT_DATE para poder saber si hoy cumple años o no, yo intente hacer algo así:

SELECT ( ( RIGHT( CURRENT_DATE, 5 ) - RIGHT( fecha_nacimiento, 5 ) ) AS edad FROM personas

Y luego mediante un algoritmo filtrar todos los que edad es = 0, de esta forma saco los que hoy cumplen años, pero el problema es que es muy ineficiente eso, cuando allá muchos registros se va a poner lento el servidor, alguien tiene una idea mejor?? Gracias
  #2 (permalink)  
Antiguo 11/05/2008, 12:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Re: Seleccionar los que hoy cumplen años

Cita:
Iniciado por maderic_m Ver Mensaje
SELECT ( ( RIGHT( CURRENT_DATE, 5 ) - RIGHT( fecha_nacimiento, 5 ) ) AS edad FROM personas
Y luego mediante un algoritmo filtrar todos los que edad es = 0, de esta forma saco los que hoy cumplen años, pero el problema es que es muy ineficiente eso, cuando allá muchos registros se va a poner lento el servidor, alguien tiene una idea mejor?? Gracias
Esto te busca aquellos en que el mes y día de hoy coincide con el mes y día de su nacimiento. No te dice los años, pero sí selecciona los que cumplen el día de hoy

SELECT * from personas where date_format (fecha_nacimiento, '%m') = date_format (now(), '%m') AND date_format(fecha_nacimiento, '%d') = date_format (now(), '%d')
  #3 (permalink)  
Antiguo 11/05/2008, 12:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Re: Seleccionar los que hoy cumplen años

¿Para que te complicas con RIGHT(), si tienes la función YEAR()?
Código:
SELECT (YEAR(CURRENT_DATE()) - YEAR(fecha_nacimiento)) edad FROM personas;
En cuanto a acotar a las que cumplen el mismo día, bueno, sería:
Código:
SELECT (YEAR(CURRENT_DATE()) - YEAR(fecha_nacimiento)) edad 
FROM personas
WHERE (DAY(CURRENT_DATE()) = DAY(fecha_nacimiento)
AND MONTH(CURRENT_DATE()) = MONTH(fecha_nacimiento)
AND YEAR(CURRENT_DATE()<YEAR(fecha_nacimiento));
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/05/2008, 12:44
Avatar de maderic_m  
Fecha de Ingreso: agosto-2007
Mensajes: 53
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Seleccionar los que hoy cumplen años

Muchas gracias jurena y gnzsoloyo, me anduvieron bien las dos soluciones.
  #5 (permalink)  
Antiguo 11/05/2008, 13:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Re: Seleccionar los que hoy cumplen años

de nada, amigo, aunque la solución buena es la de gnzsoloyo, pues la consulta te saca además el número de años y lo hace usando las funciones más apropiadas.

Yo aprovecho para abusar de nuevo de los conocimientos de gnzsoloyo y preguntarle si existe alguna diferencia de rendimiento entre una consulta con date_format ('%d') y otra con DAY(), y lo mismo com MONTH () y YEAR() respecto a las consultas con date_format('%m'), etc.
Gracias por anticipado.
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 13:48.