2020年6月6日 星期六

特定字元出現次數-以面板檢測結果為例

本文將說明如何利用字串函數功能,以方便計算並查詢出LCD之生產良率偏低之玻璃基板。
一片8.5代玻璃基板可以被切割成846吋面板(Panel),針對各面板進行檢測,將粗分合格及不合格兩種等級(字元O代表合格、X代表不合格),並將此八片測試結果以字串(如:OOXXOOXX)儲存。

對於合格率偏低的玻璃基板需進行後續相關製程分析,將測試結果字串不合格字元(X)的數量占玻璃基板面板數比率代表此玻璃基板不合格率。
Panel
1
Panel
2
Panel
3
Panel
4
Panel
5
Panel
6
Panel
7
Panel
8

 將查詢不合率高於
50%的玻璃基板,而一片玻璃基板可切割出8片面板,將篩選出不合格超過或等於4者,以下將列出不合格片數及不合格率等資訊。SQL語法及結果如下所示:

SQL
說明
ORACLE
SELECT GlassId
  , LENGTH(TRANSLATE(Judge, '@O', '@')) "Fail(N)"
  , LENGTH(TRANSLATE(Judge, '@O', '@'))
                                 / 8 * 100 "Fail(%)"
FROM
  (
  SELECT 1 GlassId, 'OXOOXXXO' Judge
  FROM DUAL
  UNION ALL
  SELECT 2, 'OXXOXXXO'
  FROM DUAL
  UNION ALL
  SELECT 3, 'OXOOXOOX'
  FROM DUAL
  )
WHERE INSTR(Judge, 'X', 1, 4) >0
(1) 找出良率偏低者
利用INSTR搜尋測試結果字串中第四個X(不合格)字元位置,即
INSTR(Judge, 'X', 1, 4)
若回傳值大於0,代表此玻璃基板至少有四片面板不合格

(2) 計算不合格片數及良率
採用TRANSLATE函數,利用其無法對應者則空白字元取代的特性,將O(合格)置換為空白字元,剩餘字元數即代表不合格。
另外也可使用REPLACE函數,方法與MSSQL雷同。

MSSQL
SELECT GlassId
  , LEN(REPLACE(Judge, 'O', ''))          "Fail(N)"
  , 100.0 * LEN(REPLACE(Judge, 'O', ''))
/"Fail(%)"
FROM
  (
  SELECT 1 GlassId, 'OXOOXXXO' Judge
  UNION ALL
  SELECT 2, 'OXXOXXXO'
  UNION ALL
  SELECT 3, 'OXOOXOOX'
  ) A
WHERE LEN(REPLACE(Judge, 'O', ''))>=4
REPLACE函數將合格字元(O)置換成空白字串,其餘字元即為不合格字元(X),長度即代表不合格總片數。

: MSSL2017雖已提供TRANSLATE函數,但函數特性與ORACLE略有不同,採用REPLACE仍屬相對簡單作法。
結果如下表:
GlassId
Fail(N)
Fail(%)
1
4
50.00
2
5
62.50

以文中所提及之INSTRTRANSLAE函數,建議參閱延伸閱讀文章:
函數
資料庫
延伸閱讀
INSTR
ORACLE
TRANSLATE
ORACLE/MSSQL2017


沒有留言:

張貼留言