1、字符串类操作
CLOB字段操作:
select * from tab1 t where DBMS_LOB.SUBSTR(t.name, 4000, 1) = '产品名'
select substr(t.idcard, 7, 8) from tab1; -- 从第7位开始,截取8位。
TT地址类变量的操作\生意贷:substr + instr
字符拼接:col1 || col2
2、时间类操作
select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟;可直接to_char(sysdate, 'HH24')
select date'2019-10-01' from dual -- 快捷操作
month_between(t1, t2) -- 月份差
last_day(t1) -- 最后一天
trunc(date1) -- 只截取时间数据到天
date'2020-03-22' -- 快捷设置时间格式数据
-- 生成时间序列
select rownum r, last_day(add_months(trunc(sysdate), -rownum)) as enddate
from dual
connect by rownum <= 36
3、窗口函数操作
简单排序:
select t.*, row_number() over(partition by t.idcard order by t.applytime desc) as rn
from tab1 t
where t.rn = 1
偏移计算函数:lag、lead
select listagg(name, ',') within GROUP(order by name) OVER(partition by customer)
4、常用函数\表操作\系统表
nvl:填充空值。
decode:简易便捷的case when。
trunc:截取时间到日、或者当年当周第一天等。
avg:求平均(比习惯的sum/count更简洁),eg:avg(nvl(x, 0))
variance:求方差
coalesce:如为空即填充后面字段值
truncate table tab1; --清空表
delete from tab1 where name = 'xl'; commit;
update tab1 set col1 = 1 where col2 is null
alter table tab1 drop column col1;
5、良好习惯
时间比较操作时,增加trunc,截取到日期。
比值类计算时,无特别精度要求,计算结果round保留4位小数。
占比计算时,防止分母为零,可用decode函数编码(为空或许好于-999,-999容易在python处理时误分箱),需要根据变量的业务含义决定-999还是null。
round(decode(y, 0, -999, x/y), 4) as z
6、其他
并行模型:select /*+ parallel(4) */ t.name from table1 t
限制条数:select * from tab1 where rownum < 10
临时表操作:with tab1 as (), tab2 as () select * from tab1
同一表中两列比较:select * from tab1 t1 where t1.name1= t1.name2
left join tab2 on 1 = 1 -- 所以是全连接
网友评论