oracle 求两个日期之间的所有日期

本文介绍了一种使用Oracle数据库查询两个指定日期之间的所有日期的方法。通过使用TO_DATE函数将字符串转换为日期类型,并结合ROWNUM和CONNECT BY子句,可以生成一系列连续的日期。这种方法对于需要在日期范围内进行数据处理的任务非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--oracle 求两个日期之间的所有日期
SELECT TO_CHAR((TO_DATE(KSRQ, 'yyyy-MM-dd') + (ROWNUM - 1)), 'yyyy-MM-dd') DT
  FROM DUAL
CONNECT BY ROWNUM <=
           (TO_DATE(JSRQ, 'yyyy-MM-dd') - TO_DATE(KSRQ, 'yyyy-MM-dd') + 1)
--------------------- 
作者:Danishlyy1995 
来源:优快云 
原文:https://blog.youkuaiyun.com/u012934325/article/details/82119685 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

SELECT TO_CHAR((TO_DATE(KSRQ, 'yyyy-MM-dd') + (ROWNUM - 1)), 'yyyy-MM-dd') DT
  FROM DUAL
CONNECT BY ROWNUM <=
           (TO_DATE(JSRQ, 'yyyy-MM-dd') - TO_DATE(KSRQ, 'yyyy-MM-dd') + 1)

    

SELECT TO_CHAR((TO_DATE('20180101', 'yyyy-MM-dd') + (ROWNUM - 1)), 'yyyy-MM-dd') DT
  FROM DUAL
CONNECT BY ROWNUM <=
           (TO_DATE('20181231', 'yyyy-MM-dd') - TO_DATE('20180101', 'yyyy-MM-dd') + 1)

### Oracle 中计算两个日期之间的工作日方法 在 Oracle 数据库中,为了精确地计算两个日期之间的有效工作日,通常会借助预先定义好的节假日表来辅助判断哪些日子是非工作日。具体实现上可以采用存储过程或自定义函数的形式完成这一逻辑处理。 对于给定的情况描述,在用户的环境中已经存在一张包含了全年每日信息的表格,其中通过特定标志位区分工作日与非工作日(例如:`1` 表示工作日;`2` 或其他值表示非工作日),这大大简化了后续操作流程的设计[^1]。 下面展示了一个基于上述条件构建的功能性 SQL 函数 `SUMDAY` 的例子: ```sql CREATE OR REPLACE FUNCTION SUMDAY( fodate IN DATE ) RETURN INT IS V_COUNT INT; BEGIN SELECT CASE WHEN COUNT(d.fdate) > 10 THEN 1 ELSE 0 END INTO V_COUNT FROM t_weekday d WHERE d.fflag = '1' -- 标记为工作日 AND d.fdate > TO_CHAR(fodate, 'YYYY-MM-DD') AND d.fdate <= TO_CHAR(SYSDATE, 'YYYY-MM-DD'); RETURN V_COUNT; END; / ``` 此段代码实现了如下功能: - 输入参数是一个起始日期 (`fodate`); - 查询位于该输入日期之后直至当前系统时间范围内被标记为工作日(`fflag='1'`)的具体记录数量; - 如果这段时间内存在的工作日数目超过十个,则返回数值 `1` ,反之则给出 `0` 。这种设计主要用于满足某些特殊业务场景下的需判定[^2]。 然而值得注意的是,如果目的是单纯获取任意两指定日期间的实际工作日总数而非仅限于是否超出某个阈值的话,那么应当调整查询语句中的聚合方式以及输出结果形式以适应新的目标要。比如修改后的版本可能更接近以下样式: ```sql CREATE OR REPLACE FUNCTION WORKDAYS_BETWEEN_DATES( start_date IN DATE, end_date IN DATE ) RETURN NUMBER AS work_days_count NUMBER := 0; BEGIN FOR rec IN (SELECT fdate FROM t_weekday WHERE fflag = '1' AND fdate BETWEEN start_date AND end_date) LOOP work_days_count := work_days_count + 1; END LOOP; RETURN work_days_count; END; / ``` 这段改进版脚本能够接收一对具体的开始和结束日期作为输入,并遍历介于此二者之间的所有符合条件的日程条目,累加得到最终的结果——即两者间确切的工作日总量[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值