oracle常用sql
oracle常用sql
获取年份
方法1:
Select to_number(to_char(sysdate,'yyyy')) from dual;
方法2:
Select Extract(year from sysdate) from dual
获取月份
方法1:例如 2022-02-02 获取到的结果为 02
Select to_number(to_char(sysdate,'mm')) from dual;
方法2:例如 2022-02-01 00:00:00 获取到的结果为 02
Select Extract(year from sysdate) from dual
方法3:例如 2022-02-09 00:00:00 获取到的结果为 2022-02-01 00:00:00
Select to_date(sysdate,'yyyy-mm') from dual
取多个数字中的最大值最小值(不同的字段中)
最大值:greatest(args1,args2.……)
selet greatest(num1,num2) from TEST;
最小值least(args1,args2.……)
selet least(num1,num2) from TEST;
同一个字段中获取最大值最小值
最大值:max()
最小值:min()
selet max(age) from users group by user_id;
selet min(age) from users group by user_id;
获取中位数
median()
selet median(age) from users group by user_id;
向上取整
ceil()
例如 1.12 计算结果为2
selet median(1.12) from users ;
向下取整
floor()
转到字符串
to_char:
获取第二大值
使用开窗函数获取第二大值
select * from (
select id,列名,row_number() over(partition by id order by 字段名 desc) as r_id from 表名
)
排序并实现当前数据-后 N 行的数据 (lead) 前 N 行的数据 (lag)
select 列名 -lead(字段名, num, defaultvalue) over(partition by 字段名 order by 排序的字段名 desc) res from table'
lead(field, num, defaultvalue) field 需要查找的字段,num 往后查找的 num 行的数据,defaultvalue 没有符合条件的默认值
后 N 行的数据 (lead)
前 N 行的数据 (lag)
注意事项:
WHERE 1=2 指查询的结果为空,若写成 WHERE 1=1 ,则会将整个表结构及其表数据复制过去
四舍五入 round()
round(number,4):数值取值,四舍五入;
数值截取
trunc():数值截取,非四舍五入
去重
distinct():去重;
替换
decode(替换);
转行
listagg():转行
length():字符串长度;
concat():字符串拼接;
substr():字符串截取
sql取交集,并集,差集
union all:表示不去掉重复数据
union:表示去掉重复数据
intersect:表示交集,共有的数据
minus:表示差集,先查出第一个,然后减去第二个的数据
case …when
case 列名
when 条件值1 then 选项1
when 条件值2 then 选项2.......
else 默认值 end
case
when 列名=条件值1 then 选项1
when 列名=条件值2 then 选项2.......
else 默认值 end