我在 Oracle 中编写了一个查询,现在需要将其转换为大查询格式,我对大查询非常陌生,需要您的帮助
(to_char(解码(符号(解码(to_char(c.last_updated_time +3, 'D') ,7 , c.last_updated_time +5 ,1 ,c.last_updated_time +5, 2, c.last_updated_time +5,3, c .last_updated_time +4, c.last_updated_time +3) -sysdate),-1,3,1)),' ') 优先级
首先我们使用
last_updated_time
生成一些样本数据。 Priority
日期晚几天,具体取决于星期几。所以模拟一个周末和工作日。因此,添加到 last_updated_time
是通过 TIMESTAMP_ADD
完成的。由于 Interval
是
根据星期几(从 1 到 7 的数字),使用以下语句:
CASE day_of_the_week WHEN 7 then adding_value ... end
所以我们最终得到这个查询:
WITH
tbl AS (
SELECT *
from unnest(generate_timestamp_array(timestamp "2023-01-01",timestamp "2023-02-01",interval 1 day ) ) as last_updated_time
)
SELECT *,
TIMESTAMP_ADD( c.last_updated_time, INTERVAL (
CASE EXTRACT(DAYOFWEEK FROM TIMESTAMP_ADD(c.last_updated_time, INTERVAL 3 DAY))
WHEN 7 THEN 5
WHEN 1 THEN 4
WHEN 2 THEN 4
WHEN 3 THEN 4
ELSE 3
END
) DAY ) AS Priority_A,
CASE
WHEN EXTRACT(DAYOFWEEK FROM TIMESTAMP_ADD(c.last_updated_time, INTERVAL 3 DAY)) = 7 THEN
TIMESTAMP_ADD(c.last_updated_time, INTERVAL 5 DAY)
WHEN EXTRACT(DAYOFWEEK FROM TIMESTAMP_ADD(c.last_updated_time, INTERVAL 3 DAY)) IN (1, 2, 3) THEN
TIMESTAMP_ADD(c.last_updated_time, INTERVAL 4 DAY)
ELSE
TIMESTAMP_ADD(c.last_updated_time, INTERVAL 3 DAY)
END
AS Priority_B
FROM
tbl AS c
order by 1
如您所见,提出了另一种解决方案,其中先完成星期几的案例陈述,然后对每个案例进行日期计算。