1.2017-01-05至2018-04-05 希望返回 每个月有几天,可以用一个函数或者存储过程来实现
2.因为有大量的数据需要处理,所以返回值需要有对应,也就是说输入(id,起始日期,结束日期) 就可以返回对应的id 每个月的天数: id 月份 天数
5条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
jamsbwo 2018-06-18 06:14最佳回答 专家已采纳函数设计思路
--计算相差月份 循环{ --赋值当前日期(累加) --计算当前年是否闰年 --追加当前年月和天数 --当前日期加1 }
函数内容
create or replace function GETMONTHANDDAYS(ID VARCHAR2,DATE_START in DATE, DATE_END in DATE) return varchar2 is FunctionResult varchar2(2000) := ''; type num_list is varray(12) of VARCHAR2(2); P_DAYS num_list := num_list('31','30','31','30','31','30','31','31','30','31','30','31'); P_DAYS_RUNNIAN num_list := num_list('31','29','31','30','31','30','31','31','30','31','30','31'); CUR_DATE DATE; CUR_YEAR NUMBER; CUR_MONTH NUMBER; GE_MONTH NUMBER; begin select ceil(months_between(DATE_END,DATE_START)) INTO GE_MONTH FROM DUAL; CUR_DATE := DATE_START; if GE_MONTH>0 then LOOP EXIT WHEN GE_MONTH=0; select extract(year from CUR_DATE) into CUR_YEAR FROM DUAL; SELECT EXTRACT(MONTH FROM CUR_DATE) INTO CUR_MONTH FROM DUAL; IF ((mod(CUR_YEAR, 4)=0 and mod(CUR_YEAR, 100)!= 0) or (mod(CUR_YEAR, 400) = 0)) then FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||P_DAYS_RUNNIAN(CUR_MONTH)); ELSE FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||P_DAYS(CUR_MONTH)); END IF; CUR_DATE:= ADD_MONTHS(CUR_DATE,1); GE_MONTH := GE_MONTH - 1; END LOOP; end if; return(substr(FunctionResult,2)); end GETMONTHANDDAYS;
结果示例(只需要根据分号截取每一条看是不是你想要的)
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(4条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2018-06-18 05:01回答 5 已采纳 函数设计思路 ``` --计算相差月份 循环{ --赋值当前日期(累加) --计算当前年是否闰年 --追加当前
- 2020-06-09 13:01回答 4 已采纳 以下sql已在Oracle 12c环境运行通过。 ``` select to_char(last_day(add_months(sysdate, -1)) - 2, 'yyyy-MM-dd')
- 2018-10-11 09:50回答 4 已采纳 select substr(相关字段,instr(相关字段,'|',0,2),instr(相关字段,'<',0,1)) from 表名
- 2020-07-05 08:03沉、睡的博客 两个时间相差天数 //两个时间相差天数 兼容firefox chrome function datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式 var dateSpan, tempDate, iDays; sDate1 = Dat...
- 2019-07-09 17:07FV8023的博客 因为本人不是主要从事Oracle等大数据操作方向,所以对于SQL语句了解并不专业,本文主要用于记录自己的使用心得,以及为广大网友提供思路,如果不喜欢我的解析和讲解可以直接跳过,拿走你觉得有用的SQL。 如题,...
- 2021-03-10 18:07俊杰梓的博客 将字符串1和字符串2连接成一个新的字符串 ========================================== select concat('zhang','junjie') from dual; ========================================== CONCAT('ZHANG','JUNJIE') ...
- 2017-06-10 02:45回答 9 已采纳 select o.ORG_ID, o.rn from (select i.ORG_ID, rownum as rn from (SELECT ORG_ID FROM T
- 2022-04-07 10:53回答 1 已采纳 with a(name,num,a_date) as ( select '李','7', to_date('2021-12-20','yyyy-MM-dd') from
- 2015-09-09 07:33回答 4 已采纳 select a.t_date,a.胜,b.负 from ((select t_date,count(*) 胜 from t group by t_status,t_date having T_STA
- 2019-09-24 18:17小麦苗DBA宝典的博客 Oracle数据库备份、灾备的23个常见问题 为了最大限度保障数据的安全性,同时能在不可预计灾难的情况下保证数据的快速恢复,需要根据数据的类型和重要程度制定相应...
- 2019-01-14 11:05weixin_34088838的博客 1、问:Oracle11g数据库数据量有50T,每天增量50g左右,该如何制定备份方案,如何验证备份的有效性? 答:50T的数据也不大,运营商的地市级市数据基本都在100T以上了,只要备份环境允许的话,也能在12h内备份完成。...
- 2020-03-18 10:09筱程技术的博客 第一章 建设背景 1.1 国家政策 2017年1月 工业和信息化部正式发布了...工信部公示“2018年大数据产业发展试点示范项目名单”,公布了包括大数据存储管理、大数据分析挖掘、大数据安全保障、产业创新大数据应用、...
- 2022-03-30 10:48回答 1 已采纳 oracle的sysdate是从数据库所在的服务器操作系统上取的,通俗点说就是电脑时间,随便修改可能会导致各种异常问题。下面几种方式都可以指定日期时间 select date '2022-03-22'
- 2021-06-30 10:49回答 3 已采纳 你的思路错啦 你既然想出入两个参数进行查找,就不该写一个参数呀,试试这样写怎么样 <if text="a!=null and b!=null"> solver_name LIKE '%'
- 2018-01-10 15:34回答 14 已采纳 因为没有日期,是2020年1月1日减去2019年1月1日,中间没有闰二月,所以是365
- 2021-01-18 14:42随缘清风殇的博客 业务流程中产生的登录、订单、用户、商品、支付等数据,通常存储在DB中,MySQL、oracle中 web/app业务交互 - 业务服务器 - mysql业务数据(业务日志数据) - sqoop上传到hdfs ①业务数据上传到mysql数据库中,有些...
- 2021-09-27 22:42 得不到的永远最美的博客 oracle自右而左进行解析,from子句中应该将最先需要被处理的表写在最右边,如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后; ORACLE采用自右而左的顺序解析WHERE子句,根据这个原理,表...
- 2020-03-13 10:01筱程技术的博客 第一章 建设背景 1.1 国家政策 2017年1月 工业和信息化部正式发布了...工信部公示“2018年大数据产业发展试点示范项目名单”,公布了包括大数据存储管理、大数据分析挖掘、大数据安全保障、产业创新大数据...
- 2016-03-18 10:48回答 4 已采纳 ``` select a.*,b.value from a,b where instr(a.a_id,a_num)=1 ```
- 2018-02-27 17:52善良的白菜的博客 关于 Oracle 备份与恢复 15 个典型问题1、问:Oracle11g数据库数据量有50T,每天增量50g左右,该如何制定备份方案,如何验证备份的有效性?答:50T的数据也不大,运营商的地市级市数据基本都在100T以上了,只要备份...
- 没有解决我的问题, 去提问