Ps: 我所遇到的,我所理解的
1、nvl(参数1,参数2)
详解:
若参数1不为空,返回参数1本身,参数1为空,则返回参数2
扩展:nvl(参数1,参数2,参数3)
若参数1为空,返回参数3,参数1不为空,返回参数2
2、instr(s1,s2,[start_position],[sum])
详解:
字符串查找函数,在s1中找s2的出现的位置(查找是从下标1开始的),其中[start_position]可选,表示在s1上开始查找的字符位置,默认是1;[sum]可选,表示查找的s2在s1中出现的次数,默认是1
3、to_char(参数1,参数2)
详解:
将数字型、日期型转换为字符型
举个栗子:
将日期型转换为字符型
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
2021/05/21 6:40:15
将数字型转换为字符型
to_char(value)
-- 其中value是数字型,转换成同类型后用于比较
4、to_date(参数1,参数2)
详解:
将数字型、日期型转换为字符型
举个栗子:
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
2021/05/21 6:40:15
5、Oracle递归
详解:
select 查询字段
from 表名
[where] 筛选条件
start with 起始条件
connect by 递归条件
可以和算法中的递归中联想起来
举个栗子:
table
id name parentId
1 爷爷
2 爸爸 1
3 儿子 2
4 女儿 2
5 孙子 3
6 孙女 3
7 外孙子 4
8 外孙女 4
select id from table
start with id = 2
connect by prior id = parentId
根据当前id的记录作为初始条件,以及递归条件: prior翻译先前的,先前的id,这里理解为前一个记录的id作为父id找它的下一条记录(子记录)
结果:
id
2
3
5
6
4
7
8
当递归条件不同的时候呢,查询结果会不会不一样
select id from table
start with id = 2
connect by prior parentId = id
根据当前id的记录作为初始条件,以及递归条件: prior翻译先前的,先前的parentId,这里理解为前一个记录的parentId作为来id找它的下一条记录(父记录)
结果:
id
2
1
6、case when then else end用法
详解:
可用于查询结果时将数字 转换为 你想显示的结果
case
when 条件 then 条件满足时的显示的结果
when 条件 then 条件满足时的显示的结果
when 条件 then 条件满足时的显示的结果
[else] 以上都不满足时显示的结果
end
举个栗子
表 table
id name is_girl
1 李知恩 1
2 胡歌 0
3 周冬雨 0
4 赵丽颖 0
select id,name,
(case
when is_girl = '1' then '女孩'
when is_girl = '0' then '男孩'
else '变态'
end) sex
from table
结果:
表 table
id name sex
1 李知恩 女孩
2 胡歌 男孩
3 周冬雨 女孩
4 赵丽颖 女孩
7、row_number over(partition by 分组字段 order by 排序字段 [asc/desc])
详解:
表示按照 分组字段进行分组后,组内按照 排序字段 进行排序。其中这个函数生成的字段是每组间的编号,从1开始,每次加一,不能重复
举个栗子:
表 table
id name value
1 李知恩 1
2 胡歌 2
3 彭于晏 2
4 赵丽颖 1
select *,row_number over(partition by value order by id)
from table
结果:
表 table
id name value number
1 李知恩 1 1
4 赵丽颖 1 2
2 胡歌 2 1
3 彭于晏 2 2
8、decode用法
详解:
decode(参数,条件值1,返回值1,条件值2,返回值2,条件值3,返回值3,…,否定值)
参数等于条件值1,则此函数返回 返回值1,以此类推,…,参数都不满足条件,返回 否定值