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)  

 

posted @ 2022-03-31 17:42  !opts  阅读(107)  评论(0编辑  收藏  举报