1.2017-01-05至2018-04-05 希望返回 每个月有几天，可以用一个函数或者存储过程来实现

2.因为有大量的数据需要处理，所以返回值需要有对应，也就是说输入(id，起始日期，结束日期) 就可以返回对应的id 每个月的天数： id 月份 天数

0

5个回答

`````` --计算相差月份

--赋值当前日期（累加）
--计算当前年是否闰年
--追加当前年月和天数
--当前日期加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;
GE_MONTH := GE_MONTH - 1;
END LOOP;
end if;
return(substr(FunctionResult,2));
end GETMONTHANDDAYS;
``````

1
jamsbwo 换插入表的话，这里就不累加了直接insert into table(id,month,days)(id,to_char(CUR_DATE,'yyyymm'),P_DAYS_RUNNIAN(CUR_MONTH))
12 个月之前 回复
jamsbwo 回复qq_15361999: FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||P_DAYS_RUNNIAN(CUR_MONTH));
12 个月之前 回复
qq_15361999 可以让显示按行来显示吗？或者插入一个表中有三列，id 月份 天数？

select trunc(时间1- 时间2) from table_name;

1

0

0
jamsbwo 哦，你是只计算当月剩余的是吗，我改下
12 个月之前 回复

IF ((mod(CUR_YEAR, 4)=0 and mod(CUR_YEAR, 100)!= 0) or (mod(CUR_YEAR, 400) = 0)) then
IF (EXTRACT(month FROM CUR_DATE)==EXTRACT(month FROM DATE_START)) then
FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||(P_DAYS_RUNNIAN(CUR_MONTH)-EXTRACT(day FROM DATE_START));
ELSE
FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||P_DAYS_RUNNIAN(CUR_MONTH));
END IF
ELSE

IF (EXTRACT(month FROM CUR_DATE)==EXTRACT(month FROM DATE_END)) then
FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||EXTRACT(day FROM DATE_END));
ELSE
FunctionResult := (FunctionResult||';'||ID||','||to_char(CUR_DATE,'yyyymm')||','||P_DAYS(CUR_MONTH));
END IF
END IF;
--中间那一段改成这个试试

0

oracle 根据一个时间段获取这个时间段内所有月份、天数、日期

Oracle 计算两个日期间隔的天数、月数和年数

oracle取当年天数与当月天数及指定月的天数
1.求当年天数的sql语句 SELECT ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 12) - TRUNC(SYSDATE, 'YYYY') days FROM DUAL 2.求当月天数的sql语句 SELECT to_number(to_char(last_day(trunc(SYSDATE)), 'DD')) from dua
oracle中某月天数的获取
select to_number(to_char(last_day(to_date(20070802,yyyymmdd)),dd))  from dual; 其中20070802为日期字符串，yyyymmdd为日期格式。
ORACLE根据日期获取当月的天数
CREATE OR REPLACE FUNCTION get_days (p_date DATE)    RETURN NUMBER AUTHID CURRENT_USER AS    p_days   NUMBER := 0; BEGIN    SELECT ( TO_DATE (TO_CHAR (ADD_MONTHS (p_date, 1), 'yyyymm'), 'yyyymm')
oracle中计算某月的天数
select add_months(to_date('201202', 'YYYYMM'),1)-to_date('201202', 'YYYYMM') from dual

Oracle根据年份和月份，返回该月一共有多少天
select to_char(last_day(to_date(‘2017-02’,’yyyy-mm’)),’dd’) from dual 也可以通过编写一共函数，根据是否是平年或者是闰年得到，在这里充分用到了oracle自带的函数，通过获取该日期的最后一天，只取年月日的日部分数据，技巧嘿嘿！
ORACLE获取某月的天数
select to_number(to_char(last_day(to_date(2008-02-20,yyyy-mm-dd)),DD)) from dual
PHP获取两个时间之间的年和月份及间隔天数 PHP两个日期之间的所有日期
[php] view plain copy  \$time1 = strtotime('2014-02-04'); // 自动为00:00:00 时分秒 两个时间之间的年和月份   \$time2 = strtotime('2015-02-06');       \$monarr = array();   \$monarr[] = '2014-02'; // 当前月;   wh

import java.util.Calendar; import java.util.GregorianCalendar; //已知一个某年某月获取其天数 public class test17 { public static void main(String[] args) {  System.out.println(getMonthDay1(2018, 2)); }
Oracle取两个日期之间的时间间隔
1、距当前日期XX天XX小时XX分XX秒之前 2、日期间隔 3、常用日期操作
Oracle 计算两个时间的差值

ORACLE 取季度之间，时间区间查询，季度，月份，星期等时间信息
--本季度第一天 select to_char(trunc(sysdate, 'q'), 'yyyy-mm-dd') from dual; --上个季度最后一天（可以用本季度第一天减去1得到） select to_char(trunc(sysdate, 'q') - 1, 'yyyy-mm-dd') from dual; --上个季度第一天(本季度第一天 减 3个月) s

import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; public class Days { public static void main(String[] args) { String d1=&quot;2018-02-07&quot;; String d2=&quot;...

t-sql获取某月天数

sql-获取指定年份指定月份的天数
declare @年月 varchar(6) set @年月= '201803' --查询2015年2月有多少天 select day(dateadd(month,1,@年月+ '01 ')-1)
PHP 如何获取两个时间之间的年和月份及间隔天数 PHP两个日期之间的所有日期
\$time1 = strtotime('2014-02-04'); // 自动为00:00:00 时分秒 \$time2 = strtotime('2015-02-06'); \$monarr = array(); \$monarr[] = '2014-02'; // 当前月; while( (\$time1 = strtotime('+1 month', \$time1)) <= \$time2){
Oracle日期加减计算 方法汇总

Oracle获取两个日期之间的所有日期（年-月）

#include <stdio.h> #include <stdlib.h> #define MONTHS 12 int main() { int days[MONTHS]={31,28,31,30,31,30,31,31,39,31,30,31}; int month; do{ printf("Input a month:"); scanf(
Java统计两个日期时间段每个月对应的天数

&amp;lt;script&amp;gt; //获取当月总共天数函数 function getMonDay(mydate) { var d = new Date(mydate); //d.getMonth()+1月份索引从0开始,天数索引从1开始，第0天即代表最后一天 var allDays = new Date(d.getFullYear(), (d.getMonth() + 1), 0).getDa...
oracle 显示俩个日期间所有的月份

package com.dz.text;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.ut...
oracle数据库如何获取两个时间点之前相差具体年月日问题

Oracle 获取两个时间间隔天数
select trunc(时间1- 时间2) from table_name; 时间1和时间2必须是date类型 如果不是必须to_date;

package com.example.datetestdemo;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; /** * @Description: 计算日期间相差天数、月份(相差的天数用1年2个月零3天格式展示)工具类 * @Author
oracle时间月份获取

Oracle查询两日期间隔的年月日
Oracle 两日期间隔的年月日用365 或者30天 都是不准的 months_between(date1,date2)函数得到的是两个时间间隔的日历月 是准确的
SQLServer 获取当前月份的总天数 逐过程 一看就明白
oracle计算两个日期之间时间差值sql
sql Server中有函数DATEDIFF能够比较方便的计算出两个时间点之间的时间差值，但是oracle就没有，需要自己写方法计算，这是比较坑爹的。 自己写了个分享一下 create or replace function datediff(type in varchar2, startTime in varchar2,endTime in varchar2,v in varchar2) r
PostgreSQL获取天数
select producename ||'注册证即将到期' as message,extract(DAY from (failuredate-NOW() )) from producetable

1、返回指定月份的总天数(当前年) eg：10--&amp;gt;31public static int countDaysInMonth(int month) {return LocalDate.now().withMonth(month).lengthOfMonth();}2、获取指定月份的当前日期的天数 eg：2017/10/10--&amp;gt;10 public static int countNow...
golang 获取指定年份中的所有天数

java 获取两个日期间相差的天数
package com.demo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo05 { public static void main(String[] args) throws Exception { //设...
ORACLE获取某个时间段之间的月份列表

java实现输入任意两个日期输出月份数和天数
java实现输入任意两个日期输出月份数和天数，综合考虑闰年、2月等因素，对于整月计算利息或按天数计算利息提供基础工具类。也可以吧内部类独立出来，方便跨包调用，可自行调整。很实用的一个实现。其他百度查到的很多类似方法存在或多或少的缺陷。