none
Consulta de fecha RRS feed

  • Pregunta

  • Hola!

    Estoy haciendo una aplicación en la cual tengo una tabla "Productos" con los siguientes campos "Id_producto, Nombre, FechaVen, DiaVen" en la cual ingreso la fecha de vencimiento de un producto y los días de anticipación con que el sistema tendrá que avisar que se aproxima la fecha de vencimiento.

    Mi duda es ¿como seria la consulta SQL para que me avise que se aproxima la fecha de vencimiento de un producto(obteniendo el nombre) de acuerdo a los días previos a la fecha de vencimiento que ingreso en el campo DiaVen?

    Saludos


    sábado, 10 de junio de 2017 19:04

Respuestas

  • Ya no estoy entendiendo nada, ¿por qué cambiaste la consulta de selección?

    SELECT 
        Nombre, 
        FechaVen,
        DateDiff(Day, GETDATE(), FechaVen) AS [Días x vencer]
    FROM 
        Productos 
    WHERE 
        CONVERT(date, GETDATE()) >= DATEADD(DAY, -DiaVen, FechaVen)    

    La misma debería recuperar el resultado bajo la forma:

    Nombre FechaVen   Días x vencer
    ------ ---------- -------------
    a      2017-06-13 2


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 lunes, 12 de junio de 2017 3:44
    lunes, 12 de junio de 2017 0:26

Todas las respuestas

  • Resta los días de anticipación de la fecha de vencimiento y compara contra el día en que ejecutas la consulta, por ejemplo:

    SELECT * FROM dbo.Productos p
    WHERE CONVERT(date, GETDATE()) >= DATEADD(DAY, -p.DiaVen, p.FechaVen)
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 10 de junio de 2017 19:46
  • Sumando a la respuesta de Morales, yo compararía le fecha de vencimiento con el día actual no se si me explico, como para tener una advertencia a medida que pasan los días. en un código VB sería algo así:

    TextBox1 seríra la fecha de vencimiento de tu tabla

    Dim Elab As Date = TextBox1.Text
    
            Ven = DateDiff(DateInterval.Day, Date.Now, Elab)
            Select Case Ven
                Case 2
                    MsgBox("Producto vence en 2 días")
                Case 1
                    MsgBox("Producto vence en 2 días")
                Case 0
                    MsgBox("Producto vence HOY")
                Case -1
                    MsgBox("PRODUCTO VENCIDO!!!")
    
            End Select
    

    No se si queda claro

    Saludos

    sábado, 10 de junio de 2017 20:12
  • Federico32113,

    Tienes que buscar todos los productos, donde la fecha de vencimiento sea igual a la fecha actual más los días de vencimiento.

    Ejemplo:

    SELECT Nombre FROM Productos

    WHERE  CONVERT(VARCHAR(8),FechaVen,112) = CONVERT(VARCHAR(8),GETDATE()+DiaVen,112)

    Quedo atento a tus comentarios.


    sábado, 10 de junio de 2017 20:17
  • Resta los días de anticipación de la fecha de vencimiento y compara contra el día en que ejecutas la consulta, por ejemplo:

    SELECT * FROM dbo.Productos p
    WHERE CONVERT(date, GETDATE()) >= DATEADD(DAY, -p.DiaVen, p.FechaVen)
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    Cree la siguiente funcion de acuerdo a tu aporte:

       Private Sub cargarProductosXVencer()
            Try
                Using con As New SqlConnection(strCadenaConexion)
                    con.Open()
                    Dim query As String = "SELECT Nombre FROM Productos WHERE Convert (date, GETDATE()) >= DateAdd(Day, -p.DiaVen, p.FechaVen) GO"
                    ' Dim query As String = "SELECT Nombre FROM Productos WHERE CONVERT(VARCHAR(8),FechaVen,112) = CONVERT(VARCHAR(8),GETDATE()+DiaVen,112)"
                   
                    Dim da As New SqlDataAdapter(query, con)
                    Dim dt As New DataTable
                    da.Fill(dt)
    
                    DGVProductosXVen.DataSource = dt
    
                   End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Pero me aparece este mensaje de error "Sintaxis incorrecta cerca de GO".

    Tengo un registro con "FechaVen"=13/6/2017 y "DiaVen"=5

    domingo, 11 de junio de 2017 23:57
  • Omite por favor la palabra GO

    Si deseas ver los días de anticipación agrega a la lista de selección la siguiente expresión:

    SELECT Nombre, DateDiff(Day, GETDATE(), p.FechaVen) FROM ...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 12 de junio de 2017 0:03
  • Omite por favor la palabra GO

    Si deseas ver los días de anticipación agrega a la lista de selección la siguiente expresión:

    SELECT Nombre, DateDiff(Day, GETDATE(), p.FechaVen) FROM ...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    Entonces me quedo así la función:

      Private Sub cargarProductosXVencer()
            Try
                Using con As New SqlConnection(strCadenaConexion)
                    con.Open()
                  
                    Dim query As String = " SELECT Nombre, DateDiff(Day, GETDATE(), FechaVen) FROM Productos WHERE CONVERT(date, GETDATE()) >= DATEADD(DAY, DiaVen, FechaVen)"
                
                    Dim da As New SqlDataAdapter(query, con)
                    Dim dt As New DataTable
                    da.Fill(dt)
    
                    DGVProductosXVen.DataSource = dt
    
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Al ejecutarla no me trae ningún registro, tengo un con los siguientes valores: "Nombre"=a, "FechaVen"=13/6/2017, "DiaVen"=5.

    Perdón que modifique mi pedido inicial de la consulta, pero como podría ser la funcion con la consulta para que me complete el DGVProductosXVen con el "Nombre", "FechaVen" y los días que restan para el vencimiento. El DGV no tiene ninguna columna predeterminada.



    lunes, 12 de junio de 2017 0:13
  • Ya no estoy entendiendo nada, ¿por qué cambiaste la consulta de selección?

    SELECT 
        Nombre, 
        FechaVen,
        DateDiff(Day, GETDATE(), FechaVen) AS [Días x vencer]
    FROM 
        Productos 
    WHERE 
        CONVERT(date, GETDATE()) >= DATEADD(DAY, -DiaVen, FechaVen)    

    La misma debería recuperar el resultado bajo la forma:

    Nombre FechaVen   Días x vencer
    ------ ---------- -------------
    a      2017-06-13 2


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 lunes, 12 de junio de 2017 3:44
    lunes, 12 de junio de 2017 0:26