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.

Consulta SQL para obtener la diferencia entre el parámetro de fecha y calcular la semana.

Cuando pasamos la fecha de inicio y la fecha de finalización en el parámetro, tengo que calcular la diferencia y si la diferencia es igual a 7, debería retornar 1,
si es 14, entonces 2 y si es 21, entonces 3, y así sucesivamente.

select person_number,
amount * 
case when( :p_to_date - :p_from_date) =6
then 1
else ( :p_to_date - :p_from_date) >6 and  ( :p_to_date - :p_from_date) <=14 
then 2
else ( :p_to_date - :p_from_date) >14 and  ( :p_to_date - :p_from_date) <=21
then 3
else ( :p_to_date - :p_from_date) >21 and  ( :p_to_date - :p_from_date) <=28 
then 4
end as week
from 
per_all_people_F papf

¿Es correcta la lógica mencionada anteriormente?

Tags:  ,

Answer

  1. Avatar for davy.ai

    No, la lógica anterior no es correcta. La sintaxis de la instrucción CASE está incorrecta. La sintaxis correcta sería:

    SELECT person_number,
           amount * 
           CASE 
              WHEN ( :p_to_date - :p_from_date) = 7 THEN 1
              WHEN ( :p_to_date - :p_from_date) = 14 THEN 2
              WHEN ( :p_to_date - :p_from_date) = 21 THEN 3
              ELSE NULL
           END AS week
    FROM per_all_people_F papf
    

    Este código calculará la diferencia entre la fecha de inicio y la fecha de finalización utilizando el operador de resta y luego comprobará si es igual a 7, 14 o 21. Si lo es, devolverá el valor correspondiente (1, 2 o 3). Si no coincide con ninguna de las condiciones, devolverá NULL.

Comments are closed.