第一个星期一的sql日期函数
我想编写一个ORACLE SQL函数,传递周数(一年中的一周)和年份(32020),函数返回本周的第一天(实际上是星期一) Func1(32020)-->第一个星期一的sql日期函数,sql,oracle,date,select,Sql,Oracle,Date,Select,我想编写一个ORACLE SQL函数,传递周数(一年中的一周)和年份(32020),函数返回本周的第一天(实际上是星期一) Func1(32020)--> 输出:2020年1月13日我首先计算一年中的第一个星期一。这可以使用格式说明符'IW'完成: trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') 然后,您可以添加请求的周数: trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') + (:we
输出: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
|RES|
| :-------- |
|1月13日至20日|
您可以轻松地将该代码放入函数中
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;
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;