es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtén solo los datos del último año en Flutter.

Creé una aplicación de senderismo donde puedo documentar dónde he estado.
Ahora, con el nuevo año, tengo un pequeño problema.
He creado una barra de menú y un botón para un nuevo sitio web donde se muestran las excursiones de 2021, pero tengo un problema, mi excursión de hoy también se muestra.

Creo que tengo un problema con mi base de datos porque mi “creationTime” está definido como TEXTO.
Pero cuando creo la entrada de senderismo, formato el creationTime como “dd.MM.yyyy”.

return sql.openDatabase(path.join(dbPath, 'wanderwege.db'),
        onCreate: (db, version) {
      return db.execute(
          'CREATE TABLE user_places(id TEXT PRIMARY KEY, title TEXT, image TEXT,image2 TEXT, image3 TEXT, createTime TEXT, place TEXT, description TEXT, duration TEXT, kilometers Text, verticalMeters Text, loc_lat REAL, loc_lng REAL, address TEXT)');
    }, version: 1);

Entonces pensé que necesito cambiar mi función “getData”, lo intenté con un WHERE creationTime < 01.01.2021 pero luego no se muestran entradas.

static Future<><><string, dynamic="">>> getData(String table) async {
    final db = await DBHelper.database();
    return db.query(table);
    //var result =
    //await db.rawQuery('SELECT * FROM "user_places" WHERE createTime < "01.01.2021"');
    //return result.toList();
  }

Mi segunda idea es crear una nueva base de datos para 2021, pero estoy seguro de que debe haber una manera de filtrar mis entradas.

Verifiqué mi base de datos y mis fechas de prueba son 06.10.2021, 01.01.2022 y 04.01.2022.

Si hago

await db.rawQuery('SELECT * FROM "user_places" WHERE createTime = "06.10.2021"');

Obtengo la única entrada con 06.10.2021, pero si lo cambio a

await db.rawQuery('SELECT * FROM "user_places" WHERE createTime BETWEEN "01.01.2021" AND "31.12.2021"');

Obtengo las tres entradas, también las dos de 2022, no lo entiendo.</string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para filtrar las entradas de senderismo por año

    Como el campo “creationTime” está definido como “TEXTO”, almacena las fechas en el formato “dd.MM.yyyy”. Utilizar una declaración “WHERE” para filtrar las entradas por fecha no ha dado los resultados esperados. Por lo tanto, es necesario actualizar la consulta de la base de datos para filtrar las entradas en función de un rango de fechas.

    Una forma de filtrar las entradas de senderismo por año es utilizar el operador “BETWEEN” en la consulta SQL. La consulta sería algo como esto:

    await db.rawQuery('SELECT * FROM "user_places" WHERE createTime BETWEEN "01.01.2021" AND "31.12.2021"');
    

    Esta consulta debería recuperar todas las entradas de senderismo que tengan un valor de “creationTime” entre el 01.01.2021 y el 31.12.2021.

    Sin embargo, si esta consulta también está devolviendo entradas de 2022, es posible que los valores en el campo “creationTime” no estén en el formato esperado. Los valores de fecha deben estar en formato “dd.MM.yyyy” y no en algún otro formato, como “MM.dd.yyyy” o “yyyy.MM.dd”.

    Por lo tanto, es esencial asegurarse de que los valores de fecha se almacenen en el formato correcto y que el formato sea consistente en todas las entradas de la base de datos.

    Como alternativa, crear una base de datos separada para las entradas de 2021 también puede ser una solución. Sin embargo, no es una solución ideal, ya que conduce a la redundancia de datos y dificulta la actualización o el mantenimiento de la aplicación a largo plazo.

    En conclusión, utilizar el operador “BETWEEN” para filtrar las entradas de senderismo por año y asegurarse de que los valores de fecha se almacenen en el formato adecuado debería resolver el problema.

Comments are closed.