【发布时间】:2015-09-10 18:53:26
【问题描述】:
CREATE OR REPLACE FUNCTION exlude_weekends (p_date_start DATE,
p_date_end DATE)
RETURN NUMBER
AS
l_no_of_days NUMBER := NULL;
BEGIN
SELECT COUNT ( * ) INTO l_no_of_days
FROM (SELECT date_extraction, TO_CHAR (date_extraction, 'DAY')
FROM (SELECT TO_DATE(p_date_start,'DD-MON-RRRR')
+ LEVEL - 1 date_extraction FROM DUAL CONNECT BY LEVEL <
(TO_DATE (p_date_end, 'DD-MON-RRRR')- TO_DATE (p_date_start,'DD-MON-RRRR'))+ 2)
WHERE TRIM (TO_CHAR (date_extraction, 'DAY')) NOT IN ('SATURDAY', 'SUNDAY'));
RETURN l_no_of_days;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END exlude_weekends;
【问题讨论】:
-
当然。它返回开始和结束之间的天数,不包括周末。
-
@GolezTrol,不,解释不被接受;你应该逐行解释......大声笑:)
-
@Rahul 我意识到我只是随口问了一个问题。你能帮我理解“级别”,特别是“+ LEVEL - 1 date_extraction”这一行
-
上下文?如果您只想询问查询,请自行显示并最好格式化。你想达到什么目的?
-
它使用分层查询生成行。进一步阅读:orafaq.com/wiki/…,docs.oracle.com/cd/B19306_01/server.102/b14200/…