Oracle 语法汇总
1) 时间字符串处理: " || " 连接符,相当于SQLServer的 " + "
2) to_date() 将字符串转换为时间格式
select to_date(TO_CHAR(SYSDATE-1,'YYYY-MM-DD')||' 20:30:00','yyyy-mm-dd HH24:mi:ss'), to_date(TO_CHAR(SYSDATE,'YYYY-MM-DD')|| ' 08:30:00','yyyy-mm-dd HH24:mi:ss') from deshuaweidefecthistory
3)decode(expression,value,result1,result2)
如果expression=value,则输出result1,否则输出result2
eg:
select decode(1+2,3,'a','b') from t1; //输出 a
应用:
1. 使用decode函数分段
将成绩表中分数大于90分的分为优秀,80~90分为良好,70~80分为中等,60~70分为及格,60分以下为不及格。
2 使用decode函数对表做行列转换
如图所示,有一张三个科目的成绩表,各科目名称和相应的分数呈现在行中,
现想将各科目名称转换为列名,每列的内容为对应科目的分数。
(如图,先用decode函数判断subject为Chinese时,输出score,不为Chinese时,输出为NULL,
因为共有三个科目,所以输出其中一个科目的分数时,其他科目的分数为NULL,这里只需要
用sum()函数来实现聚合的作用,将空值去除掉就可以了)
(sum()函数分别将name为John的每个列的值相加,如Chinese列,80+NULL+NULL=80,
再将name为Will的每个列的值相加,然后group by将name分组,最终达到如上图聚合的效果)
原文链接:https://blog.csdn.net/wcacer/article/details/100181058
4) NVL(QTYREMOVED,0)
从两个表达式返回一个非 null 值,如果QTYREMOVED为空就返回0
5) sign()函数
作用是,判断参数的值大于0则返回1,等于0则返回0,小于0则返回-1
eg:sign(70-10) 返回1
6)like 模糊查找五个字符的并以SMD开头的数据
SELECT MFGLINENAME FROM A_MFGLINE WHERE (MFGLINENAME LIKE 'HNSMD___' OR MFGLINENAME LIKE 'SMD__')
7) start with connect by prior 递归算法
SELECT c.containerid,c.containername,C.PRODUCTID,C.MFGORDERID FROM CONTAINER C START WITH C.CONTAINERNAME = 'TMTM0123456789012341234567890' CONNECT BY PRIOR C.CONTAINERID = C.SPLITFROMID UNION SELECT c.containerid,c.containername,C.PRODUCTID,C.MFGORDERID FROM CONTAINER C START WITH C.CONTAINERNAME = 'TMTM0123456789012341234567890' CONNECT BY PRIOR C.SPLITFROMID = C.CONTAINERID ORDER BY FACTORYSTARTDATE
8) 分页函数
SELECT * FROM ( SELECT t.*, rownum rn FROM ( SELECT mes_equipment,child_equipment,station_path,station_order,line_address,line_path FROM edc_siplace_equipment WHERE mes_line='SMD07' ) t) WHERE rn > (1-1)*10 AND rn <= 1*10;
9)
10)