none
Consulta sobre fechas RRS feed

  • Pregunta

  • Como hacer una consulta que me recoja los datos desde las 6:0:0 de un dia hasta las 6:0:0 del siguiente dia, 24 horas.

    Estoy probando con un between pero no consigo entender como lo puedo hacer.

    En la BBDD tengo dos columnas llamadas Hora de inicio y Hora final. Necesito que la hora de incio este dentro de ese rango de 24 horas.

    martes, 19 de enero de 2016 12:45

Respuestas

  • query = "SELECT DISTINCT * FROM AvOp WHERE AvTotal.HoraInicio Between #" + fechaI + "# AND #" + fechaF + "# ORDER BY CodAveria";

    • Marcado como respuesta tximas miércoles, 20 de enero de 2016 9:55
    miércoles, 20 de enero de 2016 9:14
  • Como te comenta Sergio es preferible que utilices parámetros.

    El uso de parámetros en tus consultas tiene diferentes ventajas sobre:

    - seguridad: evita ataques de SQL Injection
    - rendimiento: permite a los sistemas de gestión de bases de datos reutilizar planes de ejecución
    - mantenibilidad: evita muchos de los problemas provocados por el formateo de datos en función de las diferentes culturas utilizadas
    - legibilidad del código

    Por lo que he visto tenías algún error como que en OleDb los parámetros en la consulta deben indicarse con el carácter '?' o que no estabas asignando correctamente el valor de los parámetros.

    Prueba con este código:

                string query = "SELECT * FROM Averias WHERE HoraInicio BETWEEN ? AND ? ORDER BY CodAveria";
    
                OleDbDataAdapter adap = new OleDbDataAdapter(query, conexion);
                adap.SelectCommand.Parameters.AddWithValue("HoraInicio", f_ini);
                adap.SelectCommand.Parameters.AddWithValue("HoraFin", f_fin);


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta tximas miércoles, 20 de enero de 2016 9:56
    miércoles, 20 de enero de 2016 9:28

Todas las respuestas

  • Hola tximas,

    si nos muestras el código que estás utilizando seguro que alguien podrá localizar el problema.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 19 de enero de 2016 12:49
  • //Guardamos el dia, el mes y el año en tres variables
                //dtpFecha.Enabled = false;
                fechaActual = dtpFecha.Value;
                dia = fechaActual.Day;
                mes = fechaActual.Month;
                año = fechaActual.Year;
    
                //Guardamos en dos variables el inicio y final de la jornada (06:00 -> 06:00 '24h')
                DateTime f_ini = new DateTime(año, mes, dia, 6, 00, 00);
                DateTime f_fin = f_ini.AddDays(1);
    
                fechaI = dia + "/" + mes + "/" + año + " " + f_ini.Hour + ":" + f_ini.Minute + ":" + f_ini.Second;
                fechaF = f_fin.Day + "/" + f_fin.Month + "/" + f_fin.Year + " " + f_ini.Hour + ":" + f_ini.Minute + ":" + f_ini.Second;
    
                string query = "SELECT * FROM Averias WHERE HoraInicio = '" + fechaI + "' AND ?FechaF ORDER BY CodAveria";
    
                OleDbDataAdapter adap = new OleDbDataAdapter(query, conexion);
                adap.SelectCommand.Parameters.AddWithValue("HoraInicio", "?FechaI");
                adap.SelectCommand.Parameters.AddWithValue("HoraFin", "?FechaF");
                DataTable dtAve = new DataTable();
                try
                {
                    adap.Fill(dtAve);
                }
                catch
                {
                    adap.Fill(dtAve);
                }
    
                dgvAverias.DataSource = dtAve;

    martes, 19 de enero de 2016 12:53
  • La consulta no se como hacerla para que me devuelva las fechas en el rango antes comentado.

    martes, 19 de enero de 2016 12:54
  • Hola,

    los campos HoraInicio y HoraFin de qué tipo son?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de enero de 2016 13:38
  • Tu query debería ser mas o menos asi para que coja los parameteros

     string query = "SELECT * FROM Averias WHERE HoraInicio BETWEEN ?FechaI AND ?FechaF ORDER BY CodAveria";
    


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de enero de 2016 13:39
  • Me parece que esta mal tu consulta. Nunca usas el between.

    Intenta algo como esto:

    string query = "SELECT * FROM Averias WHERE HoraInicio BETWEEN ?fechaI AND ?fechaF"


    martes, 19 de enero de 2016 13:45
  • En la BBDD los registros son como este: 03/03/2015 9:32:31

    Hago esta consulta pero me devuelve el siguiente error

    string query = "SELECT * FROM Averias WHERE HoraInicio BETWEEN "+ Convert.ToDateTime(fechaI) + " AND " + Convert.ToDateTime(fechaF) + " ORDER BY CodAveria";

    OleDbException, Error de sintaxis (falta operador) en la expresión de consulta 'HoraInicio BETWEEN 13/01/2016 6:00:00 AND 14/01/2016 6:00:00'.
    martes, 19 de enero de 2016 13:48
  • No concatenes los valores

    estabas haciendolo muy bien empleando los parámetros (que es una muy buena practica)

    los campos HoraInicio y HoraFin de qué tipo son?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de enero de 2016 14:09
  • query = "SELECT DISTINCT * FROM AvOp WHERE AvTotal.HoraInicio Between #" + fechaI + "# AND #" + fechaF + "# ORDER BY CodAveria";

    • Marcado como respuesta tximas miércoles, 20 de enero de 2016 9:55
    miércoles, 20 de enero de 2016 9:14
  • Como te comenta Sergio es preferible que utilices parámetros.

    El uso de parámetros en tus consultas tiene diferentes ventajas sobre:

    - seguridad: evita ataques de SQL Injection
    - rendimiento: permite a los sistemas de gestión de bases de datos reutilizar planes de ejecución
    - mantenibilidad: evita muchos de los problemas provocados por el formateo de datos en función de las diferentes culturas utilizadas
    - legibilidad del código

    Por lo que he visto tenías algún error como que en OleDb los parámetros en la consulta deben indicarse con el carácter '?' o que no estabas asignando correctamente el valor de los parámetros.

    Prueba con este código:

                string query = "SELECT * FROM Averias WHERE HoraInicio BETWEEN ? AND ? ORDER BY CodAveria";
    
                OleDbDataAdapter adap = new OleDbDataAdapter(query, conexion);
                adap.SelectCommand.Parameters.AddWithValue("HoraInicio", f_ini);
                adap.SelectCommand.Parameters.AddWithValue("HoraFin", f_fin);


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta tximas miércoles, 20 de enero de 2016 9:56
    miércoles, 20 de enero de 2016 9:28