一、判空操作
isnull()
二、格式化时间戳
to_char(字段名,'yyyy-MM-dd hh24:MI:ss')
用例:
select to_char(endtime,'yyyy-MM-dd hh24:MI:ss') from user
三、用指定分隔符截取字符串
split_part(字段名,'分隔符', 位置)
用例:截取 path = "/业务系统/未分组/qwqw" 中的未分组; ps:截取位置为1/2/3/4
select split_part(path,'/', 3) FROM user WHERE id = '111'
四、将一个角色的多个权限用逗号连接合并到一行
SELECT string_agg(a.authname,',') authname, r.id
FROM role r, auth a
WHERE a.auth = r.id
GROUP BY r.id
结果
五、将字段中的特定值转换为指定默认值
CASE WHEN m.status = 'del' THEN '删除' ELSE '正常' END
六、求最大时间的项目
先对数据进行去排除<'2021-08' 在分组求最大值max(month)则找到最大时间的项目 并且唯一
七、设置序列号(行号)
使用 窗口函数 row_number()
select row_number() OVER (ORDER BY id) as rownum ,* from score;
什么是窗口函数 含义:窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行实时分析处理。
作用:
解决排名问题,e.g.每个班级按成绩排名 解决TOPN问题,e.g.每个班级前两名的学生 语法:
select 窗口函数 over (partition by 用于分组的列名, order by 用于排序的列名
分类:
- 排名函数:row_number(),rank(),dense_rank()
- 聚合函数:max(),min(),count(),sum(),avg(),median()
- 向前向后取值:lag(),lead()
- 百分位:percent_rank()
- 取值函数:first_value(),last_value(),nth_value()
- 分箱函数:ntile()