【发布时间】:2020-06-09 07:50:00
【问题描述】:
我想编写一个 ORACLE SQL FUNCTION,传递周数(Week of Year)和年份(3,2020),该函数返回本周的第一天(实际上是星期一)。
Func1(3,2020) ---->
输出:2020 年 1 月 13 日
【问题讨论】:
我想编写一个 ORACLE SQL FUNCTION,传递周数(Week of Year)和年份(3,2020),该函数返回本周的第一天(实际上是星期一)。
Func1(3,2020) ---->
输出:2020 年 1 月 13 日
【问题讨论】:
我将从计算一年中的第一个星期一开始。这可以使用格式说明符'IW' 来完成:
trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW')
然后您可以添加请求的周数:
trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') + (:week - 1) * 7
select trunc(trunc(to_date('2020', 'YYYY'), 'YYYY'), 'IW') + (3 - 1) * 7 res from dual
|资源 |
| :-------- |
| 20 年 1 月 13 日 |
您可以轻松地将该代码放入函数中。
【讨论】:
SELECT CASE
WHEN :weeknum = 1
THEN
TRUNC(to_date('01.01.'||:Year), 'yyyy')
ELSE
NEXT_DAY(TRUNC(to_date('01.01.'||:Year), 'yyyy') - 1, 'Son')
+ (:weeknum
- DECODE(
NEXT_DAY(TRUNC(to_date('01.01.'||:Year), 'yyyy') - 1, 'Son'),
TRUNC(to_date('01.01.'||:Year), 'yyyy'), 1,
2
))
* 7
END +1
weekstart
FROM DUAL;
【讨论】: