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.

Verifique los datos antes del siguiente día a las 10 AM.

Necesito implementar la lógica. Si el valor actual es menor o igual al próximo día a las 10 AM, entonces es 1; de lo contrario, es 0.

Este es mi registro de prueba.

Create table #tmp (ID int, Actual Datetime)

Insert into #tmp values (1,'2022-01-09 13:55:29.340')

Insert into #tmp values (2,'2022-01-07 13:55:29.340')

Insert into #tmp values (3,'2022-01-08 13:55:29.340')

select * from #tmp

Salida esperada:

ID  Actual                    1/0   
1   2022-01-09 13:55:29.340    0  
2   2022-01-07 13:55:29.340    1  
3   2022-01-08 13:55:29.340    1  

Para el ID 1 debería ser 0 porque la hora actual es después del próximo día a las 10 AM. Los IDs 2 y 3 deberían ser 1 porque son anteriores o iguales al próximo día antes de las 10 AM.

Estoy atascado en cómo verificar las 10 AM del próximo día. Por favor, ayúdame con esto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para verificar si el valor “Actual” es antes o después del siguiente día a las 10 AM, podemos utilizar las funciones DATEADD y CAST en SQL Server.

    La lógica se puede implementar de la siguiente manera:

    • La función DATEADD se utiliza para sumar un día (24 horas) al valor “Actual” y obtener el siguiente día.
    • Luego convertimos el resultado a un formato de fecha utilizando la función CAST con el estilo 101 (mm/dd/yyyy).
    CAST(DATEADD(day, 1, Actual) AS DATE)
    
    • Luego concatenamos la fecha convertida con ’10:00:00′ para obtener la fecha y hora del siguiente día a las 10 AM.
    CAST(DATEADD(day, 1, Actual) AS DATE) + '10:00:00'
    
    • Para comparar el valor “Actual” con el siguiente día a las 10 AM, podemos utilizar una declaración CASE.
    CASE
        WHEN Actual <= CAST(DATEADD(day, 1, Actual) AS DATE) + '10:00:00' THEN 1
        ELSE 0
    END
    

    La consulta final debería lucir de la siguiente manera:

    CREATE TABLE #tmp (ID int, Actual Datetime)
    
    INSERT INTO #tmp values 
    (1,'2022-01-09 13:55:29.340'),
    (2,'2022-01-07 13:55:29.340'),
    (3,'2022-01-08 13:55:29.340')
    
    SELECT 
        ID, 
        Actual, 
        CASE
            WHEN Actual <= CAST(DATEADD(day, 1, Actual) AS DATE) + '10:00:00' THEN 1
            ELSE 0
        END AS [1/0]
    FROM 
        #tmp
    

    Esto debería producir el resultado esperado como se menciona en la pregunta.

Comments are closed.