none
Consulta sql con rangos de fechas RRS feed

  • Pregunta

  • Buenas tardes, mi consulta es la siguiente:

    Tengo una consulta para obtener un reporte de ventas de la siguiente manera:

     select c.cliente as Cliente,
           dv.numero_factura as Facturas,
           sum(total) as [Valor Factura],
    	   CONVERT(VARCHAR(12),DV.fecha_contabilizada,113) AS Fecha
     from  dbo.DetalleVenta as dv inner join
             dbo.Venta as v on dv.idventa = v.idventa inner join
    		 dbo.CLientes as c on v.idcliente = c.idcliente 
     where fecha_contabilizada between '2019-10-01 00:00:00.000'  and '2019-10-31 00:00:00.000'
     --where fecha_contabilizada between '2019-10-01 00:00:00.000'  and '2019-11-01 01:00:00.000'
     group by c.cliente,dv.numero_factura,fecha_contabilizada
     order by 2 asc

    Esta consulta la tengo en un procedimiento almacenado, en donde el usuario ingresa mediante una aplicacion en la cual tengo dos DateTimePicker la @FechaInicio y @FechaFin, en este caso la @FechaInicio =01/10/2019 y la @FechaFin=31/10/2019.

    El punto es que al hacer la consulta, esta solo me arroja los datos comprendidos entre el 01/10/2019 hasta el 30/10/2019, los datos con fecha de 31/10/2019 no me los muestra, ahora bien, si pongo en el @FechaFin=01/11/2019, ahi si me arroja todas las ventas del mes de octubre, pero ocurre otro problema y es que tambien me muestra las ventas hechas el 01/11/2019, lo cual me altera el total de ventas del mes pasado en este caso Octubre.

    Si alguien me puede apoyar, se lo agradecería mucho.

    Agrego lo siguiente:

    el campo  "fecha_contabilizada" es de tipo datetime


    miércoles, 27 de noviembre de 2019 19:40

Respuestas

  • Hola Reynaldo Sanchez.

    Con los campos datetime no utilices between, utiliza

    select c.cliente as Cliente,
           dv.numero_factura as Facturas,
           sum(total) as [Valor Factura],
    	   CONVERT(VARCHAR(12),DV.fecha_contabilizada,113) AS Fecha
     from  dbo.DetalleVenta as dv inner join
             dbo.Venta as v on dv.idventa = v.idventa inner join
    		 dbo.CLientes as c on v.idcliente = c.idcliente 
     where fecha_contabilizada >= '20191001'  and fecha_contabilizada < '20191101'
     
     group by c.cliente,dv.numero_factura,fecha_contabilizada
     order by 2 asc

    Fíjate además que te he cambiado el formato de las fechas por yyyyMMdd. Puedes mantener lo que tienes, pero independientemente de la conexión que utilices y del idioma configurado en el server, con este formato tu consulta valdrá para cualquier bbdd. Sin embargo si utilizas yyyy-MM-dd, y te conectas con otro usuario que tenga el lenguaje establecido como por ejemplo spanish, te delvolverá resultados raros, o errores.

    Datetime sin perder datos

    https://javifer2.wordpress.com/2019/10/11/datetime-where-sin-perder-datos/

    • Marcado como respuesta Reynaldo Sanchez miércoles, 27 de noviembre de 2019 21:10
    miércoles, 27 de noviembre de 2019 20:19

Todas las respuestas

  • Saludos,

    Me parece que tiene que ver como tienes el date alamacenado en tu base de datos y especificamente con el mecanismo horario: 

    00:00:00.000

    Sí intetas hacer la busqueda de esta manera:

     fecha_contabilizada between '2019-10-01'  and '2019-10-31'

    Cual es el resultado?


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Proponer como respuesta"

    Blog
    J.Joaquin

    miércoles, 27 de noviembre de 2019 19:55
  • Hola Reynaldo Sanchez.

    Con los campos datetime no utilices between, utiliza

    select c.cliente as Cliente,
           dv.numero_factura as Facturas,
           sum(total) as [Valor Factura],
    	   CONVERT(VARCHAR(12),DV.fecha_contabilizada,113) AS Fecha
     from  dbo.DetalleVenta as dv inner join
             dbo.Venta as v on dv.idventa = v.idventa inner join
    		 dbo.CLientes as c on v.idcliente = c.idcliente 
     where fecha_contabilizada >= '20191001'  and fecha_contabilizada < '20191101'
     
     group by c.cliente,dv.numero_factura,fecha_contabilizada
     order by 2 asc

    Fíjate además que te he cambiado el formato de las fechas por yyyyMMdd. Puedes mantener lo que tienes, pero independientemente de la conexión que utilices y del idioma configurado en el server, con este formato tu consulta valdrá para cualquier bbdd. Sin embargo si utilizas yyyy-MM-dd, y te conectas con otro usuario que tenga el lenguaje establecido como por ejemplo spanish, te delvolverá resultados raros, o errores.

    Datetime sin perder datos

    https://javifer2.wordpress.com/2019/10/11/datetime-where-sin-perder-datos/

    • Marcado como respuesta Reynaldo Sanchez miércoles, 27 de noviembre de 2019 21:10
    miércoles, 27 de noviembre de 2019 20:19