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