¿Cuál es la mejor manera de calcular la edad en años a partir de una fecha de nacimiento en sqlite3?SQLite: Cómo calcular la edad a partir de la fecha de nacimiento
Respuesta
yo encontramos este que tal vez le ayudaría:
select
case
when date(dob, '+' ||
strftime('%Y', 'now') - strftime('%Y', dob) ||
' years') >= date('now')
then strftime('%Y', 'now') - strftime('%Y', dob)
else strftime('%Y', 'now') - strftime('%Y', dob) - 1
end
as age
from t;
De http://www.mail-archive.com/[email protected]/msg20525.html
SELECT (strftime('%Y', 'now') - strftime('%Y', Birth_Date)) - (strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date));
Ésta funciona.
simplemente he portado este ejemplo MySQL: http://dev.mysql.com/doc/refman/5.0/en/date-calculations.html
es muy dificil de hacer en SQLLite ... así que es mejor que retrive la fecha de nacimiento de la base de datos nd luego añadir esta lógica
private Calendar mConvert_Date_To_Calendar(String dateToConvert)
{
// TODO Auto-generated method stub
try
{
Calendar calConversion = Calendar.getInstance();
Date date1 = null;
try
{
date1 = new SimpleDateFormat("dd/MM/yy").parse(dateToConvert);
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
calConversion.setTime(date1);
System.out.println("mConvert_Date_To_Calender date1: " + date1
+ "caleder converted done:" + calConversion.getTime());
return calConversion;
}
catch (Exception e)
{
e.printStackTrace();
Log.i(TAG, "" + e);
return null;
}
}
private Calendar myCurrentCalender()
{
try
{
Calendar myCurrentCal = Calendar.getInstance();
myCurrentCal.set(myCurrentCal.get(Calendar.YEAR), myCurrentCal.get(Calendar.MONTH),
myCurrentCal.get(Calendar.DAY_OF_MONTH));
return myCurrentCal;
}
catch (Exception e)
{
e.printStackTrace();
Log.e(TAG, "Unable to get current calendar!");
return null;
}
}
public int daysBetween(Date d1, Date d2)
{
System.out.println("calculated age :"
+ (((d2.getTime() - d1.getTime())/((24 * 1000 * 60 * 60))/365)));
return (int) (((d2.getTime() - d1.getTime())/(24 * 1000 * 60 * 60))/365);
}
La primera función calculará la fecha de nacimiento en formato de calendario, segundo calculará la fecha actual, el tercero encontrará la diferencia entre los dos. Estas funciones deben llamarse como se muestra a continuación
dateOfBirth = mConvert_Date_To_Calendar (edad);
currentDate = myCurrentCalender();
candidateAge = daysBetween (dateOfBirth.getTime(), currentDate.getTime());
"candidateAge" tendrá la edad.
Para obtener la respuesta de @Bruno Costa para trabajar, tuve que agregar corchetes al cálculo de diferencia de tiempo en la 4ª línea e invertir la comparación a 'ahora' para ser menor o igual: según entiendo, el cálculo está funcionando si la fecha calculada es antes o después de hoy. Si la fecha calculada es hoy en día, o antes, entonces el cumpleaños ya ha sido este año o el que es hoy:
select
case
when date(dob, '+' ||
(strftime('%Y', 'now') - strftime('%Y', dob)) ||
' years') <= date('now')
then strftime('%Y', 'now') - strftime('%Y', dob)
else strftime('%Y', 'now') - strftime('%Y', dob) - 1
end
as age
from t;
Tenga en cuenta que la solución ligada a la respuesta de @Bruno en Costa fue puesto a prueba.
Solo para aclarar kai's answer (parece que la edición que ahora es mucho más desagradable, y las observaciones tienen una fuerte limitación de tamaño y problemas de formato):
SELECT (strftime('%Y', 'now') - strftime('%Y', Birth_Date))
- (strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date));
Supongamos que queremos años completos: para el primer año calendario de la vida, esto sería cero.
Para el segundo año calendario, esto dependerá de la fecha - es decir, que sería:
- para
strftime('%m-%d', 'now') >= strftime('%m-%d', Birth_Date)
[ "caso A"] - y lo contrario ["case B"];
(Supongo que sqlite realiza una comparación lexicográfica de dos cadenas de fechas y devuelve un valor entero.)
Para cualquier otro año calendario, sería el número de años entre la corriente y la segundo - es decir strftime('%Y', 'now') - strftime('%Y', Birth_Date) - 1
, más el mismo que el anterior.
En otros términos, restamos de strftime('%Y', 'now') - strftime('%Y', Birth_Date)
sólo si el opuesto de "caso A" sucede - es decir, si y sólo si strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date)
, por lo tanto, la fórmula.
puede convertir las fechas a números de punto flotante y restar ...
cast(strftime('%Y.%m%d', 'now') - strftime('%Y.%m%d', dob) as int)
... dob
donde es a valid SQLite time string.
Otra solución es utilizar el día del año %j
como una fracción del año dividiéndolo por 365.0. Así que terminan con:
select strftime('%Y', 'now') + strftime('%j', 'now')/365.2422) - (strftime('%Y', Birth_Date) + strftime('%j', Birth_Date)/365.2422);
Luego, puede emitir el resultado a un entero:
select CAST(strftime('%Y', 'now') + strftime('%j', 'now')/365.2422) - (strftime('%Y', Birth_Date) + strftime('%j', Birth_Date)/365.2422) AS INT);
o el uso redondo() para redondear el resultado:
select round(strftime('%Y', 'now') + strftime('%j', 'now')/365.2422) - (strftime('%Y', Birth_Date) + strftime('%j', Birth_Date)/365.2422));
He puesto al día el cálculo, de modo que usa el número decimal correcto de días en un año solar como lo señala Robert en el comentario siguiente.
La diferencia con los otros cálculos es que el resultado de este cálculo es un número decimal que se puede convertir a un número entero (para obtener la cantidad exacta de años) o redondeado (para obtener la cantidad aproximada de años).
Para cumpleaños, la cantidad aproximada de años puede no ser tan relevante, pero para la edad de algo que usted compró tiene más sentido.
Esto no es exacto. Puede mejorarlo ligeramente utilizando 365.2422, pero no se ajustará a las nociones culturales de edad. –
- 1. Obtener edad a partir del nacimiento
- 2. Edad desde la fecha de nacimiento con JQuery
- 3. Calcular años a partir de la fecha
- 4. PHP calcular la edad actual de la persona
- 5. Diferencia de fecha en MySQL para calcular la edad
- 6. Cómo obtener edad automáticamente cuando se le dio Fecha de nacimiento
- 7. MySQL: ¿Cómo calcular semanas a partir de una fecha específica?
- 8. PHP: Cómo calcular la edad de la persona en meses
- 9. Encontrar la edad de alguien en SQL
- 10. Cálculo de Oracle Age desde la fecha de nacimiento y hoy
- 11. Calcula una edad a partir de un formato de fecha y hora en años. ¿Qué significa?
- 12. Generar fecha de nacimiento aleatoria
- 13. calcular la edad en meses y días
- 14. ¿Cómo calcular 8 días hábiles a partir de la fecha de hoy?
- 15. sqlite seleccione con la condición en la fecha
- 16. Cadena de conversión Sqlite a la fecha
- 17. Recuperando la fecha de nacimiento con Google OAuth API
- 18. Calcular la fecha de inicio y el nombre de un trimestre a partir de una fecha determinada
- 19. ¿Cómo obtener una edad de un campo D.O.B en MySQL?
- 20. En TSQL, ¿cómo convertirías de un int a un datetime y daría la edad?
- 21. C# 30 días a partir de la fecha de hoy
- 22. Cómo diseñar la fecha de nacimiento en DB y ORM para la combinación de partes con fecha desconocida y conocida
- 23. Obteniendo día a partir de la fecha usando jquery/javascript
- 24. VB.NET Obtener solo el año a partir de la fecha
- 25. Javascript - Establecer la fecha 30 días a partir de ahora
- 26. jquery datepicker - calcular la diferencia de fecha
- 27. Calcular número de semana a partir de un valor de fecha
- 28. Validación de "fecha de nacimiento": ¿hasta dónde/cuánto llegarías?
- 29. Django - fildset fecha de nacimiento como widget de forma
- 30. jquery ui datepicker. ¿Cómo puedo mostrar TODOS los años posibles (para la fecha de nacimiento)?
'Calendario dateOfBirth; Calendario currentDate; int candidateAge; ' estos son los tipos de datos de esas variables – tejasvi