我正在尝试将此选择变为功能。 用户将使用自己想要的日期而不是sysdate的日期。 (对不起,英语不好。)
SELECT trunc(sysdate),
trunc(sysdate) - 1,
trunc(sysdate) - 2,
trunc(sysdate) - 3,
trunc(last_day(sysdate)-1, 'mm'),
add_months(trunc(sysdate, 'MM'), -1) first_day_of_last_month,
add_months(trunc(sysdate, 'MM'), -2) first_day_of_last_month,
add_months(trunc(sysdate, 'MM'), -3) first_day_of_last_month,
add_months(trunc(sysdate, 'Q'), -6) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -9) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -12) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -15) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -18) first_day_of_last_quarter
FROM dual;
结果应该在1行中看起来像这样
1/7/2019 1/6/2019 1/5/2019 1/4/2019 1/1/2019 12/1/2018 11/1/2018 10/1/2018 7/1/2018 4/1/2018 1/1/2018 10/1/2017 7/1/2017
答案 0 :(得分:0)
您可以构建一个返回引用光标的函数。
CREATE FUNCTION get_dates(pdt_ref_date IN DATE)
RETURN SYS_REFCURSOR IS
pcr_result SYS_REFCURSOR;
BEGIN
OPEN pcr_result FOR
SELECT
trunc(pdt_ref_date),
trunc(pdt_ref_date) - 1,
trunc(pdt_ref_date) - 2,
trunc(pdt_ref_date) - 3,
trunc(last_day(pdt_ref_date)-1, 'mm'),
add_months(trunc(pdt_ref_date, 'MM'), -1) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'MM'), -2) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'MM'), -3) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'Q'), -6) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -9) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -12) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -15) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -18) first_day_of_last_quarter
FROM dual;
RETURN pcr_result;
END;
可以通过以下方式使用:
SELECT get_dates(SYSDATE)
FROM DUAL;
请注意:
get_dates