我想编写一个oraclesql函数,传递周数(一年中的一周)和年(32020),函数返回本周的第一天(实际上是星期一)。功能1(32020)--->产量:13.1.2020
r7xajy2e1#
我会先计算一年中的第一个星期一。这可以使用格式说明符来完成 'IW' :
'IW'
trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW')
然后,您可以添加请求的周数:
trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') + (:week - 1) * 7
db小提琴演示:
select trunc(trunc(to_date('2020', 'YYYY'), 'YYYY'), 'IW') + (3 - 1) * 7 res from dual
| RES | | :-------- | | 13-JAN-20 |
您可以很容易地将代码放入函数中。
hgqdbh6s2#
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;
2条答案
按热度按时间r7xajy2e1#
我会先计算一年中的第一个星期一。这可以使用格式说明符来完成
'IW'
:然后,您可以添加请求的周数:
db小提琴演示:
您可以很容易地将代码放入函数中。
hgqdbh6s2#