Oracle实用SQL查询函数积累

1. 需求: 查询数据时,如果该字段值为空,则sql设置显示一个默认值,否则显示查询出来的值.

 函数: nvl(param, default);

 解释: 使用nvl函数时, 第一个参数是要查询的字段, 第二个参数是查询字段为空时显示的默认值, 如果不为空则显示查询出来的值


2. 需求: 查询数据时, 有一个字段存储的值是1,2,3这种, 查询时要显示为对应的中文.

 函数decode(status,'1','[ON]','2','[OFF]','[OFF]');

 解释: 使用decode函数相当于是一个if语句, 判断第一个参数是要查询的字段,第二个和第三个是一个组合(相当于一个if语句块),表示(值,对应值),这里中间可以有多个这样的if语句块,最后一个参数相当于else的作用,如果前面的都不满足就取最后一个值.


3. 需求: 查询时使用了like,like后面的值要是查询出来的结果

demo1: (select id from table)||'%'

demo2: select '['||count(decode(zt,'1','1'))||'/'||count(id)||']' from sb    结果是: [2/3] 这样的

 解释: sql语句中使用||两个竖线来对值进行拼接,而不是+号.


4. 需求: 根据Id等条件查询出上一条和下一条数据

 上一条函数: lag(a.id) over(partition by a.status order by a.yjsj desc)

 下一条函数: lead(a.id) over(partition by a.status order by a.yjsj desc)

 示例SQL: select t.nextid,t.beforeid from (select a.id,lead(a.id) over(partition by a.status order by a.yjsj desc) nextid,lag(a.id) over(partition by a.status order by a.yjsj desc) beforeid from table a where a.status='0') t where t.id = ?;


5. 需求: 将两个表的结果合成一个结果集返回, 字段不对应

union all 可以将两个表的结果合成一个结果集返回, 但是要将字段对应

如: table1  id,name     table2   id,name,para1,para2

select id,name,para1,para2 from table2 union all select id,name,'','' from table1



发布了90 篇原创文章 · 获赞 21 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/yx13649017813/article/details/42024377