Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第一个星期一的sql日期函数_Sql_Oracle_Date_Select - Fatal编程技术网

第一个星期一的sql日期函数

第一个星期一的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

我想编写一个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') + (: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;