Android – SQLite – SELECCIONAR ENTRE Fecha1 Y Fecha2

Mac OS X

Androide

Eclipse con ADT

SQLite

Soy nuevo en la creación de aplicaciones de Android y he investigado esto en gran medida, pero estoy llegando a ninguna parte. Necesito consultar mi base de datos SQLite para devolver todas las filas entre 2 fechas. Lo que he aprendido de mi investigación hasta el momento es que no hay columna DateTime en la base de datos SQLite Androids y tengo que guardarlo como una columna de texto. Pero creo que el problema reside en intentar comparar las cuerdas, pero no puedo encontrar una forma de evitarlo. Aquí está mi código:

DB = currentContext.openOrCreateDatabase(DBName, 0, null); DB.execSQL("CREATE TABLE IF NOT EXISTS " + tableName + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, Date VARCHAR(40), Hours INT(3));"); 

No estoy recibiendo ningún error, pero no estoy devolviendo ningún resultado de mi RawQuery. Aquí está mi código:

 Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN '" + date1 + " 00:00:00' AND '" + date2 + " 99:99:99'", null); if (c != null ) { Log.d(TAG, "date1: "+date1); Log.d(TAG, "date2: "+date2); if (c.moveToFirst()) { do { int id = c.getInt(c.getColumnIndex("ID")); String date1 = c.getString(c.getColumnIndex("Date")); int hours1 = c.getInt(c.getColumnIndex("Hours")); results.add(+ id + " Date: " + date1 + " Hours: " + hours1); } while (c.moveToNext()); } } 

También he intentado la siguiente declaración, pero no dan resultados:

 Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN " + Date(date1) + " AND " + Date(date2) + "", null); 

Tengo esta declaración de otras respuestas StackOverflow, pero no puedo encontrar ninguna documentación sobre el método date (). Im no seguro si es obsoleto ahora pero consigo el error que dice el método de la fecha (cadena) es undefined para el tipo (classname) "y he intentado importar algunas bibliotecas de JAVA.

¿Alguien sabe la forma correcta de crear una consulta rawData () que obtendrá las filas entre las fechas seleccionadas ??

Más información, estas son mis instrucciones INSERT y el formato de fecha que entra en la base de datos:

 newDB.execSQL("INSERT INTO " + tableName + " (Date, Hours) Values ('" + ph_date + "'," + hours + ");"); String date1 = "12/1/13" String date2 = "25/1/13" 

4 Solutions collect form web for “Android – SQLite – SELECCIONAR ENTRE Fecha1 Y Fecha2”

Ok, por lo que no pude conseguir fechas de cadenas para trabajar, así que tuve que convertir las fechas de cadenas a las fechas de calendario a tiempo de Unix antes de agregarlas a la base de datos de SQLite y convertirlas de nuevo (tiempo de Unix a fechas de calendario en cadena) al mostrarlas. Unix Time permite cálculos (ordenar, clasificar ascendente, entre etc) realizados en las columnas de fecha y es el mejor método para usar después de largas horas de prueba y error. Aquí está el código que terminé usando:

 Cursor c = newDB.rawQuery("select ID, Date, Hours from " + tableName + " where Date BETWEEN '" + startDateQueryDate + "' AND '" + endDateQueryDate + "' ORDER BY Date ASC", null); if (c != null ) { if (c.moveToFirst()) { do { int tempId = c.getInt(c.getColumnIndex("ID")); long tempUnixTime = c.getLong(c.getColumnIndex("Date")); //convert tempUnixTime to Date java.util.Date startDateDate = new java.util.Date(tempUnixTime); //create SimpleDateFormat formatter SimpleDateFormat formatter1; formatter1 = new SimpleDateFormat("dd/MM/yyyy", Locale.UK); //convert Date to SimpleDateFormat and convert to String String tempStringStartDate = formatter1.format(startDateDate); int tempHours = c.getInt(c.getColumnIndex("Hours")); results.add(+ tempId + " Date: " + tempStringStartDate + " Hours: " + tempHours); }while (c.moveToNext()); } } 

Debe almacenar los valores de fecha en un formato entendido por SQLite . Para fechas planas, esta sería una cadena YYYY-MM-DD , o un valor de segundos o un número de fecha juliano.

Para dar formato a una fecha como cadena, utilice algo como esto:

 Date date1 = ...; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String dateAsString = df.format(date1); 

Para dar formato a una fecha como valor de segundos, divida el valor Date.getTime() de Date.getTime() por 1000.


Si las variables de fecha ya son cadenas, debe asegurarse de que tienen el formato correcto.

Si las cadenas de fecha no tienen el formato yyyy-MM-dd , las funciones de fecha de SQLite no las entenderán, y las comparaciones no funcionarán (porque la cadena debe comenzar con el campo más significativo, el año y todos los campos deben tener un formato fijo longitud, para que las comparaciones de cadena salgan correctas).

obteniendo el nombre de los dos primeros durante 2 días

 Calendar cal = Calendar.getInstance(); Date now = new Date(); cal.setTime(now); String currentDate = sdf.format(cal.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -1); String previusdDate = sdf.format(cal.getTimeInMillis()); Log.e("Start date", currentDate); Log.e("End date", previusdDate); SQLiteOpenHelper helper; SQLiteDatabase db; helper = new My_SQliteHelper(mContext, "MyDB", null, 1); db = helper.getWritableDatabase(); Cursor cr = db.rawQuery("SELECT name,sum(minutes),date FROM Historyinfo WHERE date BETWEEN '" + previusdDate + "' AND '" + currentDate + "' GROUP BY name ORDER BY SUM(minutes) DESC LIMIT 2", null); 

100% de trabajo

No está seguro de dónde lee que Date / Time debe ser almacenado como cadenas !!! Estoy en desacuerdo.

Prefiero almacenar Fecha / Hora como valores INTEGER. Leer: http://www.sqlite.org/datatype3.html#datetime

Al Insertar datos, convierta su Fecha / hora como Tiempo Unix, el número de segundos desde 1970-01-01 00:00:00 UTC. Por ejemplo, 1 de enero de 2012 00:00:00 GMT es representado como 1356998400000

Las clases de fecha / calendario de Android han incorporado funciones para convertir las fechas en UNIX Times y viceversa.

Comprobar: http://developer.android.com/reference/java/util/Date.html#getTime%28%29

Al seleccionar, usted puede utilizar sus declaraciones selectas normales como ENTRE o cualquier cosa que usted prefiere.

He estado usando esto durante muchos años y funciona como un encanto: D

  • La tabla de actualización utilizando el método rawQuery () no funciona
  • SQLiteException Error desconocido
  • ¿Es buena idea usar las preferencias compartidas de Android para almacenar grandes cantidades de datos?
  • Cómo eliminar una fila en la primera posición de la sqlite en android
  • ¿Es el contexto de la aplicación siempre el mismo sin importar la clase?
  • Sqlite query using foreign keys
  • SQLite: No se puede enlazar argumento en el índice 1 porque el índice está fuera de rango. La sentencia tiene 0 parámetros
  • Android sqlite rollback
  • Actualización de versiones de base de datos sqlite?
  • sqlite insertar en tabla select * from
  • SQLiteAssetHelper NullPointerException sólo en algunos dispositivos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.