Os quiero enseñar como resolví un caso en particular con las bases de datos. Concretamente quería obtener tuplas resultado de hacer un
Select donde en el
where propusiera una comparación de fechas (<)
Tenemos dos fechas: una fecha es de tipo de dato
Calendar y la otra, que se encuentra en la base de datos, es de tipo
Timestamp. No podemos comparar un Calendar y un Timestamp directamente, sino que tenemos que convertirlos en un tipo de dato común. El primero que se nos puede ocurrir sería convertir ambas a tipo de dato
String.
Aquí podemos verlo:
Calendar fecha_ejemplo = Calendar.getInstance();
String fecha_1 = fecha_ejemplo.get(Calendar.YEAR) + "-" +
(fecha_fac.get(Calendar.MONTH)+1) + "-" +
fecha_fac.get(Calendar.DAY_OF_MONTH);
Cursor c = myDataBase.rawQuery("SELECT _id, " +
"strftime('%Y-%m-%d', fecha_2) AS fecha_2 " +
"FROM TablaEjemplo " +
"WHERE fecha2 < " + fecha_1,
new String[0] );
Aquí podemos ver que la fecha tipo Calendar le hemos dado el formato establecido en el estándar
ISO_8601 por medio de la función
get(CAMPO) de
Calendar. Por otra parte, haciendo uso de la función
strftime()
también es posible hacer la conversión a string en el formato que describe el estándar citado anteriormente.
Pero me pregunté si habría otra manera de hacerlo que no fuera convirtiéndolos a un tipo común como String. Investigando vi que podía hacerlo de otra manera: pasando las fechas a
milisegundos
Calendar fecha_cualquiera; // pongamos que está inicializada a lo que sea.
Calendar fecha_1_milisegundos = Calendar.getInstance();
fecha_1_milisegundos.setTimeInMillis(fecha_cualquiera.getTimeInMillis());
Cursor c = myDataBase.rawQuery("SELECT _id, " +
"(strftime('%s', fecha_2) * 1000) AS fecha_2" +
"FROM TablaEjemplo " +
"WHERE fecha_modificacion > " +
fecha_fac_milis.getTimeInMillis(), new String[0] );
En esta ocasión podemos también pasar tanto Calendar como Timestamp a un formato común en milisegundos.
¿Qué pensáis? Saludos.
hola Daniel! gracias por esta entrada, excelente, dejame ponerlo en práctica y te aviso quetal me va, ya hace tiempo que lo publicaste pero creo que sería una buena manera de poder comparar campos de fechas, pasa que tengo también en el SQLite almacenado el campo fecha como un String y necesito compararlo con un json que devuelve la fecha en formato long, pero esto lo convierto a cadena para poder compararlo.
ResponderEliminar