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

resta de fechas para saber edad en mysql

Estas en el tema de resta de fechas para saber edad en mysql en el foro de Mysql en Foros del Web. hola, deseo hacer una resta del dia de hoy respecto a las fechas de nacimiento de mis usuarios para saber las edades. y el total ...
  #1 (permalink)  
Antiguo 26/09/2011, 08:25
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
resta de fechas para saber edad en mysql

hola,
deseo hacer una resta del dia de hoy respecto a las fechas de nacimiento de mis usuarios para saber las edades. y el total de usuarios en cada edad..
pero nose como hacerlo para que me de en anos..

tengo esto
SELECT COUNT(*) as total, DATEDIFF(now(),fecha_nacimiento) as edad FROM usuarios group by edad order by total desc

nose como hacer para que me muestre en anos. y agruparlo por grupos de edades, y ordenarlo por el grupo que tenga mas usuarios
alguien me podria colaborar porfavor?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 26/09/2011, 08:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: resta de fechas para saber edad en mysql

Hola Lexus:

Hay varias formas para calcular la edad, con MySQL, una de ellas sería así:

Código:
TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE())
Checa el siguiente script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE edades (id VARCHAR(10), fecha_nacimiento DATE);
  2. Query OK, 0 rows affected (0.14 sec)
  3.  
  4. mysql> INSERT INTO edades VALUES ('uno', '1980-08-14'), ('dos', '1980-09-25'),
  5.     -> ('tres', '1980-09-26'),('cuatro', '1980-09-27');
  6. Query OK, 4 rows affected (0.03 sec)
  7. Records: 4  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT id, fecha_nacimiento,
  10.     -> TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) AS edad
  11.     -> FROM edades;
  12. +--------+------------------+------+
  13. | id     | fecha_nacimiento | edad |
  14. +--------+------------------+------+
  15. | uno    | 1980-08-14       |   31 |
  16. | dos    | 1980-09-25       |   31 |
  17. | tres   | 1980-09-26       |   31 |
  18. | cuatro | 1980-09-27       |   30 |
  19. +--------+------------------+------+
  20. 4 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) AS edad,
  23.     -> COUNT(*)
  24.     -> FROM edades GROUP BY edad;
  25. +------+----------+
  26. | edad | COUNT(*) |
  27. +------+----------+
  28. |   30 |        1 |
  29. |   31 |        3 |
  30. +------+----------+
  31. 2 rows in set (0.00 sec)

Saludos
Leo
  #3 (permalink)  
Antiguo 26/09/2011, 09:35
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: resta de fechas para saber edad en mysql

gracias por tu ayuda, nose que sera que estoy haciendo mal me saca este error.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 5.1 Driver][mysqld-4.1.13a-nt]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 '(YEAR, fecha_nacimiento, CURDATE()) AS edad, COUNT(*) FROM usuarios GROUP BY eda' at line 1



lo estoy haciendo asi:
SELECT TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) AS edad, COUNT(*) as total FROM usuarios GROUP BY edad
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 26/09/2011, 10:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: resta de fechas para saber edad en mysql

Hola de nuevo Lexus....

Estás utilizando una versión completamente vieja y obsoleta de MySQL... la función TimeStampDiff no existe en la versión 4.1 de MySQL, es por eso que te marca error.

Mi recomendación sería que migraras de BD, pero no se si esto sea posible, o buscar dentro de las funciones de fecha que tiene esta versión de MySQL alguna otra que te pueda servir.

Una opción sería usar la función DATEDIFF que pones al inicio y dividir entre 365, pero tendrías que validar también el caso de los años bisiestos.

También podrías checar esta liga:

Trucos MySQL - Calcular la edad a partir de la fecha de nacimiento

Aunque no recuerdo en estos momentos si las funciones de fecha que se manejan son soportadas por la versión 4.1, sería cuestión de que pruebes.

Saludos
Leo.
  #5 (permalink)  
Antiguo 26/09/2011, 13:54
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: resta de fechas para saber edad en mysql

hola, gracias por tu ayuda, tengo 5.1 en la bd. tanto en localhost como en internet.. y en ambos me sale el mismo error, qeu podra ser?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 26/09/2011, 15:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: resta de fechas para saber edad en mysql

Estás seguro de que estás utilizando la versión 5.1??? porque el error dice otra cosa:

Código:
[MySQL][ODBC 5.1 Driver][mysqld-4.1.13a-nt]
Una cosa es la versión de Driver y otra es la versión de la BD...

Cómo estás probando la consulta??? mediante una página web o directamente sobre mySQL (en el workbench o en cualquier otra consola de administración)

Probaste alguna de las otras opciones que aparecen en la liga??? utilizando la YEAR o DATEDIFF... todas fallaron??? qué errores están marcando???
La liga muestra al menos dos formas alternativas para calcular la edad:

Código MySQL:
Ver original
  1. YEAR(CURDATE())-YEAR(`AMIGOS`.`F_NACIMIENTO`) + IF(DATE_FORMAT(CURDATE(),'%m-%d') >
  2. DATE_FORMAT(`AMIGOS`.`F_NACIMIENTO`,'%m-%d'), 0, -1) AS `EDAD_ACTUAL`


Código MySQL:
Ver original
  1. round(datediff(sysdate(),FECHA_NACIMIENTO)/365)


Ambas tienen detalles que considerar, pero igual y te pueden servir.

Saludos
Leo.
  #7 (permalink)  
Antiguo 26/09/2011, 15:09
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: resta de fechas para saber edad en mysql

pues no me habia fijado, es que acabo de preguntar en el chat, la mysql version, y me dijeron que la 5.1 pero el driver que se usa es el 3.51 asi qeu nose entonces que sucede, y la consulta la probe en mi codigo,no directamente en la consola, voya probarlo en la consola a ver si me funcinoa como tu dices,
gracias por tu tiempo.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 26/09/2011, 15:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: resta de fechas para saber edad en mysql

Para no tener dudas ejecuta esto desde consola:

mysql> select VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.5.14 |
+-----------+
1 row in set (0.01 sec)

Eso te dará la versión de MySQL que tienes instalada.

Saludos
Leo.
  #9 (permalink)  
Antiguo 29/09/2011, 08:52
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: resta de fechas para saber edad en mysql

hola, ejecute la version y me arrojo este resultado
5.1.56-community
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #10 (permalink)  
Antiguo 29/09/2011, 08:57
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: resta de fechas para saber edad en mysql

me marca este error directamente en la consola de phpmyadmin en el servidor

#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 '(YEAR, fecha_nacimiento, CURDATE()) AS edad FROM usuarios LIMIT 0, 30' at line 1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #11 (permalink)  
Antiguo 29/09/2011, 09:30
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: resta de fechas para saber edad en mysql

Copiá y postea acá la consulta desde la ventana desde donde la estás ejecutando.
No la transcribas. Copy+Paste.
Necesitamos ver qué es lo que realmente está recibiendo phpMyadmin.

Tip: algunas interfases programadas en PHP suelen meter espacios entre los nombres de las funciones y el paréntesis. Eso genera un error de sintaxis casi indetectable a simple vista.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 20/10/2012, 10:34
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: resta de fechas para saber edad en mysql

Colega este codigo te puede servir

ami me sirvio 100% comprobado
Código PHP:
CREATE TABLE PAGOS (
  
PAG_CODIGO bigint primary key AUTO_INCREMENT,
  
PAG_CLIENTE bigint not null,
  
PAG_PLAN bigint not null,
  
PAG_PROMOCION bigint,
  
PAG_COSTO bigint,
  
PAG_FECHA_INICIAL date not null,
  
PAG_FECHA_FINAL date not null,
  
PAG_SESIONES_RESTANTES INTEGER,
  
PAG_CADUCADO BOOLEAN DEFAULT 0,
  
PAG_VER BOOLEAN DEFAULT 1  
ENGINE=InnoDB;


INSERT INTO PAGOS VALUES
(1,2,3,4,5,'2012-10-20','2012-10-27',0,0,1),
(
2,2,3,4,5,'2012-10-20','2012-10-29',0,0,1);

UPDATE PAGOS SET PAG_SESIONES_RESTANTES=(SELECT DATEDIFF(PAG_FECHA_FINAL,NOW())); 

Etiquetas: edad, resta, select
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 22:32.