【1】数据库常用函数

151 阅读1分钟

一、判空操作

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()