--like语句优化

reverse(line)like reverse('AA')


--sql比较两个字符串是否包含

INSTR(MASTER_WO, A.WORK_ORDER) > 0;


--case when 语句

CASE WHEN INSTR(MASTER_WO, A.WORK_ORDER) > 0 THEN 'OK' ELSE '不一致' END RES;


--根据某栏位排序

SELECT CHECK_IN_TIME,

                      ROW_NUMBER ()

                          OVER (PARTITION BY SERIAL_NUMBER ORDER BY CHECK_IN_TIME DESC)

                          RN

                 FROM table

                WHERE sn ='123';


--将字符串时间转化成时间格式比较

TO_DATE( A.WORK_DATE || LPAD( A.WORK_TIME, 2, '0' ) || '0000', 'YYYYMMDDHH24MISS' ) >= TO_DATE( REPLACE ( '2021-01-01', '-', '' ) || '08' || '0000', 'YYYYMMDDHH24MISS' )


TO_CHAR( B.OUT_PROCESS_TIME, 'yyyyMMddhh24miss' ) BETWEEN '20230715' || '00' || '0000' AND '20210802' || '08' || '0000'


--判断字符串空值就赋值为0

NVL (J.FAIL_QTY, 0);


--判断字符串值

DECODE (H.CURRENT_STATUS,

                                    '0', 'PASS',

                                    '9', 'Retest',

                                    '1', 'FAIL');


--截取字符前或后面的字符串

SELECT SUBSTR('KSLRJ423350007_2', 1, INSTR('KSLRJ423350007_2', '_')-1) AS result FROM dual;

SELECT SUBSTR('KSLRJ423350007_2', INSTR('KSLRJ423350007_2', '_')+1, 1) AS result FROM dual;


--查询正在运行的job

SELECT job,

      what,

      to_char(last_date, 'yyyy - mm - dd hh24:mi:ss') last_date,

      to_char(next_date, 'yyyy - mm - dd hh24:mi:ss') next_date,

      interval

 FROM dba_jobs;



--查询oracle相同行的数据:

select wo,item_ipn from IMES.p_check_bom a

         where  rowid< (select max(rowid) from IMES.p_check_bom

             where wo=a.wo and item_ipn=a.item_ipn);


--查询数据库表的数据量:

SELECT table_name, num_rows

FROM all_tables

WHERE table_name IN ('P_REWORK_NO');


--分组查询

SELECT

   T.PROCESS_ID,

   A.PROCESS_NAME,

   COUNT( 1 ) RepassQTY

FROM

   (

   SELECT DISTINCT

       A.SERIAL_NUMBER,

       A.PROCESS_ID,

       A.CURRENT_STATUS,

       ROW_NUMBER ( ) OVER ( PARTITION BY A.SERIAL_NUMBER, A.PROCESS_ID ORDER BY A.OUT_PROCESS_TIME DESC ) RN

   FROM

       table1 A

   WHERE

       A.OUT_PROCESS_TIME BETWEEN TO_DATE( '2023-09-20 08:00:00', 'YYYY-MM-DD HH24:MI:SS' )

       AND TO_DATE( '2023-10-12 20:00:00', 'YYYY-MM-DD HH24:MI:SS' )

       AND ROUTE_ID = '110001520'

   ORDER BY

       SERIAL_NUMBER,

       PROCESS_ID

   ) T,

   table2 A

WHERE

   1 = 1

   AND T.RN > 1 --AND T.CURRENT_STATUS = 0

   

   AND T.PROCESS_ID = A.PROCESS_ID

GROUP BY

   T.PROCESS_ID,

   A.PROCESS_NAME;


--查询SPE1字符串中第一个逗号和第三个逗号之间的字符串


SELECT SUBSTR(SPEC1, INSTR(SPEC1, ',', 1, 1) + 1, INSTR(SPEC1, ',', 1, 3) - INSTR(SPEC1, ',', 1, 1) - 1) AS result


FROM TABLE_NAME WHERE PART_NO='LA4AU020-CS-H-B';


--查询所有存储当中是否用了tabel_A这个表


SELECT DISTINCT NAME FROM all_source --系统表

WHERE TYPE = 'PROCEDURE' --类型为存储

AND upper(text) LIKE '%tabel_A%';


--查询所有存储中是否使用A字段

select T.OWNER||'.'||t.name,t.line,t.text from all_source t where type = 'PROCEDURE'

and upper(text) like '%A%' order by T.OWNER||'.'||t.name,t.line