我想知道是否可以构建一个ORACLE SQL FUNCTION来返回一个周中的日期,而不是使用连接表。
本周结束于星期三,所以如果我们的日期是1月5日星期五那么结束日期将是以后的星期三10/01/2018
MON 1ST JAN - 03/01/18
TUES 2ND JAN - 03/01/18
WED 3RD JAN - 03/01/18
THURS 4TH JAN - 10/01/18
FRI 5TH JAN - 10/01/18
SAT 6TH JAN - 10/01/18
SUN 7TH JAN - 10/01/18
MON 8TH JAN - 10/01/18
TUES 9TH JAN - 10/01/18
WED 10TH JAN - 10/01/18
THURS 11TH JAN - 17/01/18
我正在调查功能路线的原因是为了将来证明这个过程,所以我没有维护第二个查找表&摆脱不必要的联接。
答案 0 :(得分:2)
我成功了解了一项工作
SELECT NEXT_DAY('25-JAN-2018 00.00', 'WEDNESDAY')FROM DUAL;
答案 1 :(得分:1)
您可能需要以下内容:
select d,
case
when trunc(d, 'IW') +2 >= d
then trunc(d, 'IW') +2
else trunc(d, 'IW') +9
end as next_wed
from (
select date '2018-01-01' + level -1 as d
from dual
connect by level <= 11
)
这会得到包含日期的星期一的星期一,然后加上2或9,具体取决于在输入日期前一天加2的事实。
另一种方法可以是检查输入日期是否在本周的周三之前或之后:
case when to_char(d, 'D') <= 3
then trunc(d, 'IW') +2
else trunc(d, 'IW') +9
end as next_wed