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

seleccionar cumpleaños

Estas en el tema de seleccionar cumpleaños en el foro de Bases de Datos General en Foros del Web. como puedo seleccionar las fechas de cumpleaños iguales o mayores al día actual, si en la BD solo estan sus fechas de nacimiento en el ...
  #1 (permalink)  
Antiguo 07/06/2011, 12:47
Avatar de xamilo  
Fecha de Ingreso: febrero-2010
Mensajes: 120
Antigüedad: 14 años, 2 meses
Puntos: 1
seleccionar cumpleaños

como puedo seleccionar las fechas de cumpleaños iguales o mayores
al día actual, si en la BD solo estan sus fechas de nacimiento en
el formato YYYY-MM-DD
__________________
- Ingeniero en Informática -
  #2 (permalink)  
Antiguo 07/06/2011, 12:52
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: seleccionar cumpleaños

¿Y con qué DBMS estás trabajando?
Mira que las funciones de fecha cambian según cuál uses...
__________________
¿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 07/06/2011, 12:56
Avatar de xamilo  
Fecha de Ingreso: febrero-2010
Mensajes: 120
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: seleccionar cumpleaños

mysql, he mirado pero creo que me estoy enredando mucho
__________________
- Ingeniero en Informática -
  #4 (permalink)  
Antiguo 07/06/2011, 13:13
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: seleccionar cumpleaños

No la he probado pero sería algo así

Código MySQL:
Ver original
  1. SELECT *FROM tabla
  2. CAST(CONCAT(YEAR(NOW()),'-',MONTH(fecha_nacimiento),'-',DAY(fecha_nacimiento))
  3. AS DATETIME) AND CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATETIME)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 07/06/2011, 13:14
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: seleccionar cumpleaños

En realidad es algo tan sencillo como
Código MySQL:
Ver original
  1. FROM tabla
  2.     DAY(fecha_nacimiento) = DAY(CURDATE())
  3.     AND
  4.     MONTH(fecha_nacimiento) = MONTH(CURDATE())
Porque en definitiva son cumpleaños todos los que coincidan en día y mes...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 08/06/2011, 09:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: seleccionar cumpleaños

Hola compañeros:

La consulta del compañero gnzsoloyo serviría para obtener los que cumplen años el día de hoy faltaría obtener los posteriores. sólo habría que modificar faltaría colocar >= en la condición del dia (para obtener todos los que cumplen años el mes actual), y una condición OR con MES_NACIMIENTO > al actual para todos los que cumplan en meses posteriores.

El planteamiento del compañero Huesos52 también parece correcto, pero hay algunos problemas con el manejo de fechas que sería conveniente aclarar. hay que recordar que la función NOW regresa la fecha y hora actual, sin embargo en el límite superior que estás colocando pones esto:

Código MySQL:
Ver original
  1. mysql> select CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATETIME);
  2. +---------------------------------------------------------+
  3. | CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATETIME) |
  4. +---------------------------------------------------------+
  5. | 2011-12-31 00:00:00                                     |
  6. +---------------------------------------------------------+
  7. 1 row in set (0.00 sec)

Si observas la hora la pone como (00:00:00), por lo tanto si la consulta se ejecutara el 31 de diciembre después de las 00:00:00 horas, no mostraría los que cumplen años ese día.

Para evitar este tipo de problema sería recomendable manejar campos DATE, para acarrear la hora:

Código MySQL:
Ver original
  1. mysql> select CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATE);
  2. +-----------------------------------------------------+
  3. | CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATE) |
  4. +-----------------------------------------------------+
  5. | 2011-12-31                                          |
  6. +-----------------------------------------------------+
  7. 1 row in set (0.00 sec)

Modificando ambas soluciones quedaría más o menos así:

Código MySQL:
Ver original
  1. mysql> create table tabla (nombre varchar(15), fecha_nacimiento date);
  2. Query OK, 0 rows affected (0.13 sec)
  3.  
  4. mysql> INSERT INTO tabla VALUES ('Hugo', '1980-06-07'), ('Paco', '1973-06-08'),
  5.     -> ('Luis', '1967-12-31'), ('Leo', '1980-08-01');
  6. Query OK, 4 rows affected (0.03 sec)
  7. Records: 4  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from tabla;
  10. +--------+------------------+
  11. | nombre | fecha_nacimiento |
  12. +--------+------------------+
  13. | Hugo   | 1980-06-07       |
  14. | Paco   | 1973-06-08       |
  15. | Luis   | 1967-12-31       |
  16. | Leo    | 1980-08-01       |
  17. +--------+------------------+
  18. 4 rows in set (0.00 sec)
  19.  
  20. mysql> #Con la solución que propone gnzsoloyo;
  21. mysql> SELECT *
  22.     -> FROM tabla
  23.     -> WHERE
  24.     -> DAY(fecha_nacimiento) >= DAY(CURDATE())
  25.     -> AND
  26.     -> MONTH(fecha_nacimiento) = MONTH(CURDATE())
  27.     -> OR
  28.     -> MONTH(fecha_nacimiento) > MONTH(CURDATE());
  29. +--------+------------------+
  30. | nombre | fecha_nacimiento |
  31. +--------+------------------+
  32. | Paco   | 1973-06-08       |
  33. | Luis   | 1967-12-31       |
  34. | Leo    | 1980-08-01       |
  35. +--------+------------------+
  36. 3 rows in set (0.00 sec)
  37.  
  38. mysql> #Con la solución que propone Huesos52;
  39. mysql> SELECT * FROM tabla
  40.     -> WHERE
  41.     -> CAST(
  42.     -> CONCAT(YEAR(NOW()),'-',MONTH(fecha_nacimiento),'-',DAY(fecha_nacimiento))
  43.  
  44.     -> AS DATE)
  45.     -> BETWEEN
  46.     -> CURDATE() AND
  47.     -> CAST(CONCAT(YEAR(NOW()),'-','12','-','31') AS DATE);
  48. +--------+------------------+
  49. | nombre | fecha_nacimiento |
  50. +--------+------------------+
  51. | Paco   | 1973-06-08       |
  52. | Luis   | 1967-12-31       |
  53. | Leo    | 1980-08-01       |
  54. +--------+------------------+
  55. 3 rows in set (0.00 sec)

Saludos
Leo.
  #7 (permalink)  
Antiguo 08/06/2011, 20: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: seleccionar cumpleaños

Cuando volvía del trabajo se me ocurrió otra posibilidad. Esto nunca lo probé, pero tiene que andar:
Código MySQL:
Ver original
  1. SELECT MAKEDATE(YEAR(CURDATE()), DAYOFYEAR(fecha_nacimiento)) DiaCumple
  2. FROM tabla
  3. WHERE DAYOFYEAR(fecha_nacimiento) >= DAYOFYEAR(CURDATE());
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 08/06/2011, 20:50
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: seleccionar cumpleaños

Hola,

Cita:
Iniciado por xamilo Ver Mensaje
como puedo seleccionar las fechas de cumpleaños iguales o mayores
al día actual, si en la BD solo estan sus fechas de nacimiento en
el formato YYYY-MM-DD
...
¿Es una pregunta capciosa? Fechas de nacimiento, si no ha nacido entonces si valdría la pena tomar en cuenta el año. De otra forma es tan simple como gnzsoloyo escribió:

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad es algo tan sencillo como
Código MySQL:
Ver original
  1. FROM tabla
  2.     DAY(fecha_nacimiento) = DAY(CURDATE())
  3.     AND
  4.     MONTH(fecha_nacimiento) = MONTH(CURDATE())
Porque en definitiva son cumpleaños todos los que coincidan en día y mes...
Y posiblemente para aclarar mas la situación, si la fecha de nacimiento es en el año 2013, pues no ha nacido, y tendrías que ser muy buen vidente para calcular eso, de otra forma cualquiera que tenga el mismo día y mes esta en el rango de ser 'cumpleañero'.

Ahora bien ... para mí que quiso decir ... como hago para extraer todas las fechas de cumpleaños del día de hoy y días posteriores del mismo mes, o año, o algo así, pero no se supo expresar.

Con lo cual, para los del mismo mes, quedaría algo así, basado en el ejemplo del mismo gnzsoloyo:

Código MySQL:
Ver original
  1. FROM tabla
  2.     DAY(fecha_nacimiento) >= DAY(CURDATE())
  3.     AND
  4.     MONTH(fecha_nacimiento) = MONTH(CURDATE())

Y para los de todo el año, el mismo gnzsoloyo lo escribió en la respuesta anterior, osea que yo no aporte mucho solamente aclarar la situación ... :)

Saludos,

Última edición por HackmanC; 08/06/2011 a las 21:18 Razón: mes x año

Etiquetas: mysql, bases-de-datos
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 11:42.