oracle和sqlserver中获取起始时间在某一个季度或者月份所占的天数的函数

Oracle》》》》》》》》》》》》》》》》》》》》》》》》获取起始时间在某一个季度所占的天数
/*
 *   FUNCTION NAME:get_curq_hold_day
 *		param:
 *				p_start_date	开始日期	
 *				p_end_date		结束日期
 *				p_year			年份		格式:Y2018
 *				p_quarter		季度 	格式:1
 *   DESCRIPTION:
 *      获取一个时间段在某年的某个季度中所占有的天数。
 *      
 *   HISTORY:
 *      1.00  2018-12-29   BlackHeart  Creation    
*/
CREATE   FUNCTION get_curq_hold_day (
	p_start_date DATE,
	p_end_date DATE,
	p_year IN VARCHAR2,
	p_quarter IN VARCHAR2
) RETURN NUMBER IS l_start_q NUMBER;

l_end_q NUMBER;

l_cur_hold_days NUMBER;


BEGIN
	SELECT
		COUNT (1) INTO l_cur_hold_days
	FROM
		(
			SELECT
				to_char (
					p_start_date + rownum - 1,
					'yyyymmdd'
				) AS daylist
			FROM
				dual CONNECT BY rownum <= trunc (p_end_date - p_start_date) + 1
		)
	WHERE
		to_char (
			to_date (daylist, 'yyyymmdd'),
			'YYYY'
		) || 'Q' || to_char (
			to_date (daylist, 'yyyymmdd'),
			'Q'
		) = REPLACE(p_year, 'Y', '') || 'Q' || p_quarter
	GROUP BY
		to_char (
			to_date (daylist, 'yyyymmdd'),
			'YYYY'
		) || 'Q' || to_char (
			to_date (daylist, 'yyyymmdd'),
			'Q'
		) ; RETURN l_cur_hold_days ; EXCEPTION
	WHEN OTHERS THEN
		RETURN NULL ;
	END;



SQL server》》》》》》》》》》》》》》》》》》》》》》》》获取起始时间在某一个月所占的天数


CREATE  FUNCTION dbo.F_GET_DATES(
	@p_start_date varchar(100),--'2019-01-01'
	@p_end_date varchar(100),--'2019-02-01'
	@p_year varchar(100)--201902
) returns float --返回数据类型


AS
BEGIN
DECLARE @sumDate float;
SET @sumDate = 0 ; 

 SELECT
	@sumDate = (
		SELECT
			COUNT (1)
		FROM
			(
				SELECT
					dateadd(DAY, number, @p_start_date) AS dateList
				FROM
					master.dbo.spt_values
				WHERE
					type = 'P'
				AND number <= DATEDIFF(
					DAY,
					@p_start_date,
					@p_end_date
				)
			) t
		WHERE
			SUBSTRING (
				CONVERT (
					VARCHAR (100),
					t.dateList,
					112
				),
				1,
				6
			) = @p_year
	) ; 
	RETURN @sumDate
END 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值