生成开始日期和结束日期之间的日期

2024-03-25

我需要生成两个给定日期之间的所有日期。这是问题陈述:

Input:

START_DATE  END_DATE 
----------  ----------
01-FEB-16   03-FEB-16   
01-FEB-16   04-FEB-16   
01-FEB-16   05-FEB-16 
01-FEB-16   03-FEB-16 
11-FEB-16   14-FEB-16   

Output(开始日期和结束日期之间的所有日期):

BETWEEN_START_AND_END
----------------------
01-FEB-16   
02-FEB-16   
03-FEB-16
04-FEB-16   
05-FEB-16   
11-FEB-16 
12-FEB-16 
13-FEB-16 
14-FEB-16

Try;

WITH date_tbl AS ( --get (max end_date diff) group by START_DATE
    SELECT 
        Trunc(START_DATE) Min_date, 
        max(Trunc(END_DATE)) - Trunc(START_DATE) diff       
    FROM tbl
    GROUP BY Trunc(START_DATE)
),
num_tbl AS ( --data to join the table [0 , 1, 2, 3 ..... max(diff) + 1]
    SELECT LEVEL - 1 lev
    FROM  dual
    CONNECT BY LEVEL <= (SELECT Max(diff) + 1 FROM date_tbl) 
)
SELECT DISTINCT Min_date + lev date_col --adding level to get all date
FROM num_tbl JOIN date_tbl
ON lev <= diff 
ORDER BY Min_date + lev

Demo

with tbl(start_date, end_date) as (
     select Date '2016-02-01', Date '2016-02-03' from dual union all
     select Date '2016-02-01', Date '2016-02-04' from dual union all
     select Date '2016-02-01', Date '2016-02-05' from dual union all
     select Date '2016-02-01', Date '2016-02-03' from dual union all
     select Date '2016-02-11', Date '2016-02-14' from dual
),
date_tbl AS ( --get max end_date group by START_DATE
    SELECT 
        Trunc(START_DATE) Min_date, 
        max(Trunc(END_DATE)) - Trunc(START_DATE) diff       
    FROM tbl
    GROUP BY Trunc(START_DATE)
),
num_tbl AS ( --data to join the table [0 ,1 , 2, 3 ..... max(diff) + 1]
    SELECT LEVEL - 1 lev
    FROM  dual
    CONNECT BY LEVEL <= (SELECT Max(diff) + 1 FROM date_tbl) 
)
SELECT DISTINCT Min_date + lev date_col
FROM num_tbl JOIN date_tbl
ON lev <= diff
ORDER BY Min_date + lev

OutPut

DATE_COL
01.02.2016
02.02.2016
03.02.2016
04.02.2016
05.02.2016
11.02.2016
12.02.2016
13.02.2016
14.02.2016
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成开始日期和结束日期之间的日期 的相关文章

  • 在 Toad 中调试 PLSQL

    我一直在使用 PL SQL 为 Oracle db 创建包 并且我正在尝试找到一种在不使用 put line 命令的情况下调试 PL SQL 包的好方法 是否有人对如何成功调试Toad 或 SQLPlus 上的 PL SQL 包 根据 TO
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • Oracle - 将字符串与 utl_raw.cast_to_varchar2 函数的结果连接起来

    我正在尝试将字符串连接到结果utl raw cast to varchar2函数 也是一个字符串 它应该是透明的 但我无法将任何内容附加到结果中utl raw cast to varchar2 这是一个例子 select utl raw c
  • Where 子句中的 If 语句

    我正在处理一个在 WHERE 子句中包含 IF 语句的查询 但是 PL SQL Developer 在执行时给出了一些错误 谁能帮我正确的查询吗 这是查询 SELECT t first name t last name t employid
  • 转换不同世纪的日期

    我有暂存表 其中包含格式为 mm dd yy 的字符串形式的日期 我有 Oracle 11g 程序在加载到主表之前将字符串转换为日期格式 我在用着to date 03 20 34 mm dd rr 转换为日期格式 输出错误为 03 20 2
  • 如何捕获 PL/SQL 块中的唯一约束错误?

    假设我有一个 Oracle PL SQL 块 它将一条记录插入表中 并且需要从唯一约束错误中恢复 如下所示 begin insert into some table some values exception when update som
  • 浏览多个字段的值并将它们插入到同一列中

    我正在尝试使用重复行为我的 oracle apex 应用程序创建一个功能 假设我有一个车辆表 CREATE TABLE vehicles brand VARCHAR2 50 model VARCHAR2 50 comment VARCHAR
  • 如何从oracle存储过程中提取out变量?

    我有存储过程 其中有很多输出变量 所以我这样调用存储过程 export const infoHR3 async gt try const sql Declare ln order qty NUMBER ln in proc qty hr N
  • 在 PL/SQL 中创建队列订阅者的语法是什么?

    我正在尝试创建一个队列和一个在消息排队时触发的回调 但我无法触发回调 我究竟做错了什么 我有一个将消息入队的触发器 我可以在队列消息表上看到它 我可以手动将其出队并处理它 我只是无法在入队时触发回调 BEGIN DBMS AQADM CRE
  • Spring boot 2+日志详细日志不起作用,配合Logback、Hibernate + Weblogic

    I use 甲骨文11 x 春季启动 2 x maven weblogic 作为外部服务器 入口点 SpringBootConfiguration SpringBootApplication public class WebSpringBo
  • Postgresql存储过程中基于会话的全局变量?

    在 Oracle 的 PL SQL 中 我可以使用包定义创建基于会话的全局变量 对于 Postgresql 的 PLpg SQL 这似乎是不可能的 因为没有包 只有独立的过程和函数 以下是 PL SQL 将 g spool key 声明为全
  • 将十六进制转换为字符串

    我想用HEXTORAW 从 ASCII 十六进制代码 30 获取 char 值 ASCII HEX 30 应返回 varchar 0 该怎么做呢 是HEXTORAW 正确的功能 你可以使用utl raw http docs oracle c
  • 无法连接 ORA-12514: TNS: 侦听器当前不知道连接描述符中请求的服务

    我想将 PLSQL 开发工具连接到数据库 但由于以下错误而无法连接 ORA 12514 TNS 侦听器当前不知道连接描述符中请求的服务 检查下面的配置 如何配置才能使其正常工作 SQL gt select value from v para
  • 尝试使用 sql 获取单行结果? [复制]

    这个问题在这里已经有答案了 我正在尝试显示所有员工 ID 我需要这样的结果 emp id 10 11 12 13 14 15 当尝试时 SELECT LISTAGG emp id WITHIN GROUP ORDER BY emp id A
  • 在 Oracle 过程中实现多线程

    我正在研究 Oracle 10gR2 这是我的问题 我有一个程序 我们称之为 proc parent 在包内 应该调用另一个过程 让我们调用它 用户创建 我得打电话 用户创建 在一个循环中 它从表中读取一些列 并且这些列值作为参数传递给 用
  • 关于pl/sql存储程序文本的问题

    我使用 TOAD 进行 PL SQL 开发 在 TOAD 中 当我输入过程名称并按 f4 时 我可以看到该过程的源代码 我认为 TOAD 从 v sqltext 视图获取源代码 为了证实我的想法 我写了一个查询 select from v
  • 如何记录更改列 DDL 操作

    我需要创建一个数据库触发器来记录每个更改 Add Column Modify Column Drop Column 使用Oracle的模式触发器在特定表中执行语句 如何获得 到目前为止我尝试了下面的代码 TRIGGER after ddl
  • Oracle 中的函数与过程

    Oracle 中函数和过程的主要区别是什么 如果我可以用函数完成所有事情 为什么我必须使用过程 如果我无法在sql语句中调用过程 好吧 我会编写一个函数来完成相同的工作 过程不返回值 好的 在任何 dml 操作后我将仅返回 sql rowc
  • TOAD 将 &String 视为绑定变量

    我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4

随机推荐