您的位置:首页 > 数据库 > Oracle

Oracle sql技巧--生成序列

2017-07-29 09:08 639 查看
1.获取未来4年的年份序列
select to_char(add_months(sysdate, (level - 1) * 12), 'yyyy') as yearSeq
from dual
connect by level <= 4;
查询结果:



2.获取包含当季的过去4个季度,并升序排列
--获取当前季度并向前推4个季度
select to_char(add_months(trunc(sysdate, 'q'), -3 * level + 3), 'yyyy-q') quarter
from dual
connect by level <= 4
order by quarter;
查询结果:



说明:
--返回当季第一天
select trunc(to_date('2017-03-20', 'yyyy-mm-dd'), 'q') from dual;


查询结果:



有关trunc函数的详细用法见Oracle trunc()函数的用法
拓展:
通过sql查询指定年份下给定季度的最后一天,如传入2018年的1季度,则返回2018-03-31
这个在oracle中没有特定的函数可以直接实现这个功能select add_months(trunc(to_date('2018', 'yyyy') + 1, 'q'), 1 * 3) - 1 as resultDay from dual;


把以上的sql封装成oracle函数,以后直接调用就能返回结果,sql如下:CREATE OR REPLACE FUNCTION "FN_QLASTDAY" (vcyear in varchar2, --年度
vcquarter in varchar2 --季度
) return date is
resultDay date;--结果
--根据年份,查询指定季度的最后一天
begin
select add_months(trunc(to_date(vcyear, 'yyyy') + 1, 'q'), to_number(vcquarter)*3) - 1 into resultDay from dual;
return resultDay;
end;调用方法:--示例:查询2018年1季度的最后一天
select fn_qlastday('2018','1') from dual;参考链接
https://zhidao.baidu.com/question/560061332.html
http://blog.csdn.net/zutsoft/article/details/44985969
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle plsql