sql - 如何根据公历计算Oracle SQL中一个期间的第一个日期和最后一个日期

标签 sql oracle date

我想根据 4-4-5 calendar 构建一个查询来获取 Oracle SQL 数据库中某个期间的第一个日期和最后一个日期。实现以下目标:

enter image description here

任何人都可以帮助我吗?我尝试了以下查询,但无法达到目的:

alter session set NLS_TERRITORY = 'THE NETHERLANDS';
alter session set NLS_CALENDAR='GREGORIAN';
SELECT add_months(trunc(sysdate) - (to_number(to_char(sysdate,'DD')) - 1), 1) -1 FROM dual;

最佳答案

第一个周期的初始日期或者是在外部提供的(我在 WITH 子句中这样做了;更有可能它是一个绑定(bind)变量,或者是过程的一个参数),或者它可以根据规则在一个单独的代码块。

有了给定或计算出的初始日期,剩下的就可以完成了,例如,如下所示。

with
  inputs ( input_date ) as (
    select date '2017-01-02' from dual
  )
select level as period_number,
       input_date + 28 * (level - 1) + 7 * trunc((level-1)/3) as period_start,
       input_date + 28 *  level - 1  + 7 * trunc( level   /3) as period_end,
       case mod(level, 3) when 0 then 35 else 28 end          as days_in_period
from   inputs
connect by level <= 12
;



PERIOD_NUMBER PERIOD_START PERIOD_END   DAYS_IN_PERIOD
------------- ------------ ------------ --------------
            1 2-1-2017     29-1-2017                28
            2 30-1-2017    26-2-2017                28
            3 27-2-2017    2-4-2017                 35
            4 3-4-2017     30-4-2017                28
            5 1-5-2017     28-5-2017                28
            6 29-5-2017    2-7-2017                 35
            7 3-7-2017     30-7-2017                28
            8 31-7-2017    27-8-2017                28
            9 28-8-2017    1-10-2017                35
           10 2-10-2017    29-10-2017               28
           11 30-10-2017   26-11-2017               28
           12 27-11-2017   31-12-2017               35

关于sql - 如何根据公历计算Oracle SQL中一个期间的第一个日期和最后一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082207/

相关文章:

sql - 选择具有3个内部联接的DISTINCT值

sql - Oracle 错误 PLS-00323 : subprogram or cursor is declared in a package specification and must be defined in the package body

mysql - SQL insert into select from - 插入 id 而不是数据

java - 如何检查日期(UTC 格式)是今天日期前 48 小时

mysql - 组连接查询mysql

mysql - 在 MySQL 中工作的 SQL 语句在 Postgresql 中不起作用 - Sum 和 group by Rails 3

sql - 如何强制排名函数为相同排名的行分配不同的值?

oracle - 如何在 Oracle 中查找打包过程和函数的代码行

javascript - IE 11 - 日期不工作

java - 单元格中的日期格式为日期未识别为日期