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