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

  • ¿Es posible crear una tabla sqlite en tiempo de ejecución basada en el número de elementos en matriz
  • Android sqlite rollback
  • Cómo restringir la base de datos sqlite abierta en el proyecto de la biblioteca de Android mientras crea el archivo jar
  • Unión externa izquierda con cláusula Select en Android
  • SQLite Android no puede abrir el archivo de base de datos
  • Búsqueda en varias columnas mediante búsqueda de texto completo (FTS) con varios tokens utilizando el operador OR
  • cómo guardar datos de json en sqlite en android
  • Adición de filas a una base de datos sqlite mediante un bucle (Phonegap)
  • ¿Cómo actualizo mi ListView después de los cambios en la base de datos?
  • La instrucción DELETE simple no funcionó en SQlite
  • Cómo comprobar si ya existe un valor en la base de datos en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.