none
problemas con filtrar en rangos de fecha sql RRS feed

  • Pregunta

  • Estoy intentando filtrar una consulta sql, al realizarlo me da el siguiente error:

    Conversion failed when converting date and/or time from character string.

    La consulta la realizo de la siguiente manera

                Connection.Open();
                SqlDataAdapter daMostrar = new SqlDataAdapter("SELECT val1,val2,val3,val4,Fecha FROM Mov Where Fecha >= '20/09/2018' and Fecha <= '27/09/2018'", Connection);
                DataSet dsMostrar = new DataSet();
                daMostrar.Fill(dsMostrar, "Mov");
                dgvReporte.DataSource = dsMostrar;
                dgvReporte.DataMember = "Mov";
                Connection.Close();

    y tambien de esta manera:

    Connection.Open();
                SqlDataAdapter daMostrar = new SqlDataAdapter("SELECT val1,val2,val3,val4,Fecha FROM Mov Where Fecha BETWEEN '20/09/2018' and  '27/09/2018'", Connection);
                DataSet dsMostrar = new DataSet();
                daMostrar.Fill(dsMostrar, "Mov");
                dgvReporte.DataSource = dsMostrar;
                dgvReporte.DataMember = "Mov";
                Connection.Close();

    en ambos casos me da el mismo error.

    De igual manera realize una consulta parametrizada 

    Connection.Open();
                string query1 = "SELECT val1,val2,val3,val4,Fecha from Mov where Fecha >= @Fecha1 and Fecha <= @Fecha2";
                SqlCommand cmd1 = new SqlCommand(query1, Connection);
                var Fecha1 = new SqlParameter("Fecha1", SqlDbType.Date);
                var Fecha2 = new SqlParameter("Fecha2", SqlDbType.Date);
                Fecha1.Value = DatePickerDe.Value.ToString("dd/MM/yyyy");
                Fecha2.Value = DatePickerHasta.Value.ToString("dd/MM/yyyy");
                cmd1.Parameters.Add(Fecha1);
                cmd1.Parameters.Add(Fecha2);

    Con una consulta parametrizada me funciona pero me devuelve fecha y hora(con la consulta lleno un datagridview).

    Solo quiero que me devuelva la fecha, mi tabla tiene establecida la fecha como date y al insertar la informacion desde un formulario lo inserto con el formato dd/MM/yyyy, si visualizo la tabla los registros no tiene  hora.

    Alguna forma de que al llenar el datagirdview no me muestre la hora? y sin consulta parametrizada como seria la forma correcta de realizar la consulta?


    • Editado SergioRubik jueves, 27 de septiembre de 2018 22:07
    jueves, 27 de septiembre de 2018 22:06

Respuestas

  • Hola sergio

    Respecto al error Conversion failed when converting date and/or time from character string. No tiene relación si usas between o >=<=, puede que se deba al "defualt languague" de tu sql, la fecha la está interpretando como MM/ddd/yyy y no existe mes 20 pues el último mes diciembre es 12, por lo que te recomiendo que la envíes en formato yyyMMdd sin separadores, es decir:

     SqlDataAdapter daMostrar = new SqlDataAdapter("SELECT val1,val2,val3,val4,Fecha FROM Mov Where Fecha BETWEEN '20180920' and  '20180927'", Connection);

    Respecto a que tus parámetros devuelvan fecha y hora, se debe a tu datetimepicker, la propiedad Value contiene la fecha y hora, por eso los parámetros se llenan fecha y hora, para evitar eso usa Value.Date que solo contiene la fecha.

    Fecha1.Value = DatePickerDe.Value.Date;
    Fecha2.Value = DatePickerHasta.Value.Date;

    Prueba y dinos como te va.

    ...Ahora bien si cuando dices fecha y hora te refieres al campo que traes desde la bd y no a tus parámetros entonces puedes obligar a tu consulta a traer una fecha

    SELECT val1,val2,val3,val4,CAST(Fecha as DATE) Fecha from Mov where Fecha >= @Fecha1 and Fecha <= @Fecha2

    Tambíen puedes darle el formato que desees mostrar (revisa el link para mas formatos) en tu grid

    SELECT val1,val2,val3,val4,CONVERT(varchar(25),Fecha,103) from Mov where Fecha >= @Fecha1 and Fecha <= @Fecha2
    --Esta consulta te regresa la fecha con formato dd/MM/yyyy
    --ese es el estilo 103


    • Editado Yerald Mora jueves, 27 de septiembre de 2018 22:30 Posible mal interpretación de fecha y hora
    • Marcado como respuesta Pablo RubioModerator lunes, 1 de octubre de 2018 17:10
    jueves, 27 de septiembre de 2018 22:22