一,数据转换类
1 REGEXP_REPLACE函数,例子,REGEXP_REPLACE(字段名,'[^0-9]','' ),所有非数字转换为空字符。
2 NVL函数,例子,NVL(字段名,'a'),字段如果为空则转换为‘a’,如果字段是多个空格,并不会转换。
3 nvl2(a,b,c)函数: 如果a的值不为空,那么取b的值,如果a的值为空,那么取c的值(类似三目运算符)
4 trunc函数截取时间,时间可以为空,不报错,例子,SELECT * FROM user where trunc(字段名) < TRUNC(SYSDATE - 7)
5 to_date函数,字符串转时间 例子, to_date('2019-12-23 23:59:59','yyyy-MM-dd HH:mm:ss')
6 to_char 时间转换为字符串,select * from tablename a where to_char(日期字段,'yyyymm')='200312'
7 NVL函数与trunc函数合用,为空时设置时间默认值,例子,SELECT * FROM user where NVL(trunc(字段名),to_date('1949/10/01','yyyy/mm/dd')) < TRUNC(SYSDATE - 7)
8 translate函数,例子,select translate('1234567','123' ,'abc') from dual 。1替换为a,2替换为b,3替换为c 结果:abc4567 。
如果 没有对应字符则替换为null;select translate('1234567','123' ,'ab') from dual。3替换为null。结果:ab4567。
9 sign(number) : 如果number大于0,sign则返回1;如果number小于0,sign则返回-1;如果number等于0,sign则返回0.
10 substr(str,a,b): 字符串截取函数 ,str :待截取字符串,a :截取开始位置,b :截取个数
11 listagg() ..within group() :
select LISTAGG(order_num,'+') WITHIN GROUP (ORDER BY order_num) NAMES from tab_user where class = '一班'
合并数据,列转行
12 decode(value,if1,then1,if2,then2,if3,then3,...,else)
13 CASE WHEN condition THEN result [WHEN … THEN …] … [ELSE result] END
select name , age,
case when age>18 then '成年人'
when age<=18 and age>12 then '少年'
when age <=12 and age >6 then '儿童'
else '幼儿'
end as class
from person ;
14 instr :字段包含某个字符串。 例子: select * from students where instr(address, 'beijing') > 0
二,知识点
1,字段排序,并且null值排最后,例子,select * from user order by aaa desc nulls last
未完待续。。。。。