sql - 我正在尝试将选择转变为 Toad/Oracle 中的功能
问题描述
我正在尝试将这个选择变成功能。而不是 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 Row 中看起来像这样
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
解决方案
您可以构建一个返回引用光标的函数。
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
- 你可能需要在一个包中定义这个函数,特别是如果你有几个相关的函数/procs
推荐阅读
- node.js - AngularJs $http 请求保持挂起,不从数据库返回值
- c++ - ACL 中的 EXPLICIT_ACCESS 数组 - WIN32 API
- c - 询问数组中的char
- sql - 访问 VBA SQL 更新 - 预期参数太少 1
- shell - 获取预期的 Shell 语法错误操作数
- java - Spring MVC项目的JUnit测试中@Autowired的问题
- python - tf.io.read_file 无法从 numpy 数组中找到文件或目录
- javascript - 使用 JavaScript 或 PHP 的游戏服务器的实时控制台输入/输出
- mongodb - ReactNative x MongoDB:无法启动我的项目
- tortoisesvn - 无法从存储库更新选定的文件 - 没有用于更新的上下文菜单