【问题标题】:sql Date function for the first Monday第一个星期一的sql日期函数
【发布时间】:2020-06-09 07:50:00
【问题描述】:

我想编写一个 ORACLE SQL FUNCTION,传递周数(Week of Year)和年份(3,2020),该函数返回本周的第一天(实际上是星期一)。

Func1(3,2020) ---->

输出:2020 年 1 月 13 日

【问题讨论】:

    标签: sql oracle date select


    【解决方案1】:

    我将从计算一年中的第一个星期一开始。这可以使用格式说明符'IW' 来完成:

    trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') 
    

    然后您可以添加请求的周数:

    trunc(trunc(to_date(:year, 'YYYY'), 'YYYY'), 'IW') + (:week - 1) * 7
    

    Demo on DB Fiddle

    select trunc(trunc(to_date('2020', 'YYYY'), 'YYYY'), 'IW') + (3 - 1) * 7 res from dual
    
    |资源 | | :-------- | | 20 年 1 月 13 日 |

    您可以轻松地将该代码放入函数中。

    【讨论】:

      【解决方案2】:
      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;
      

      【讨论】:

        猜你喜欢
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2011-09-27
        • 1970-01-01
        相关资源
        最近更新 更多