1. 在做列值匹配时,查找某些不等于某一特定值的值.如下:
列值 <> values
如果列值存在null,会出现一点小问题,null不会被选中.
因为null 不能用等于和不等于判断,只能用is null.
2. decode (b.q1,0,'0', to_char(to_number(round(列)),'FM9999990.99'))
decode 后边的值类型会跟第一个返回值类型相同.会导致做的格式转换失效.
union all 和case when then出现此情况会报错.
3. 取出纯数字的行
select * from 表
Where trim(translate(RTRIM(LTRIM(列)), '#0123456789', '#')) is null;
取出非纯数字的行
select * from 表
Where trim(translate(RTRIM(LTRIM(列)), '#0123456789', '#')) is not null;
SELECT * FROM 表 WHERE 列 like '%\_%' escape '\';
4.group by 在case when 之前执行,可能需要避免将大量case when 语句写在group by 中. 方法: case when在内层执行,即写在子查询当中,在外层group by.
额外附SQL语句执行顺序:
1from 2on 3join 4where 5group by 6with{cube | rollup} 7having 8select 9distinct 10order by 11top
top是MySQL中的用法.
order by 的列需要出现在group by中5.去除回车换行和空格(excel导入的数据会出现此问题)
SELECT FAILURE_MODE_POTENTIAL, replace(replace(replace(FAILURE_MODE_POTENTIAL , chr(10),''),chr(13),''),' ','')
FROM FMEA_TABLE_CONTENT_1204 WHERE FAILURE_MODE_POTENTIAL like 'SOLDER BALLI%'
6.合并单元格,下一行填充上一行的值
Excel中有合并单元格,导入到数据库中后合并单元格只有第一格有数据,下边为空的列需要用上一个不为空的值做填充.
nvl(列名,(lag(列名 IGNORE NULLS) over(order by to_number(row_num) ) )) ,
注意: 需要在数据导入时额外添加顺序列,使用函数时依次填充上一个不为空的值.
数据源中该列不能有确实无值的情况存在,会把该值为空的记录也进行填充,做成错误.