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;
查询结果:
![](https://img-blog.csdn.net/20180107114213192?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk5OTgwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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;
查询结果:
![](https://img-blog.csdn.net/20170729085842767?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk5OTgwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
说明:
--返回当季第一天
select trunc(to_date('2017-03-20', 'yyyy-mm-dd'), 'q') from dual;
查询结果:
![](https://img-blog.csdn.net/20170729090640302?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk5OTgwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
有关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;
![](//img-blog.csdn.net/20180322131059979?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3UwMTA5OTk4MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
把以上的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
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 SQL 性能优化技巧
- 高效分页的SQL技巧(以Oracle为例) 推荐
- oracle常用SQL语句和一些技巧
- Oracle SQL性能优化技巧大总结
- Oracle中如何用一条SQL快速生成10万条测试数据(转)
- Oracle中利用一条SQL生成10万条记录
- Oracle 常用SQL技巧收藏
- oracle connect by及函数及生成等间隔的时间序列的方法
- Oracle中SQLPLUS 常用指令收集与技巧
- Oracle SQL性能优化技巧大总结
- oracle 生成连续日期SQL
- mysql生成sql语句 and 查看mysql历史命令 and 查看mysql历史命令 and 解压命令 and 安装WPS and 启动Oracle服务
- oracle PL/SQL进行 建表、存储过程、序列、存储过程调用、Job
- 基于Oracle,采用JDBC、Hibernate不同方式实现自定义序列主键生成
- 使用pl/sql在oracle中新建表和对应序列
- Oracle SQL性能优化技巧大总结
- Oracle SQL 性能优化技巧整理
- Oracle sql生成连续时间
- SQL server中rand()生成随机数技巧接受
- oracle创建主键生成序列