oracle 判斷字符串是否包含指定內容


1.情景展示

  如何將表中的包含特殊字符的臟數據查出來?

2.instr()函數

  語法:

instr(string, substring[, start_position[, th_appearance]])

  參數說明:

  第1個參數表示:必選項。將要被檢索的字符串,可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等類型;

  第2個參數表示:必選項。將要查找的字符串,可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等類型;

  第3個參數表示:可選項。從字符串第幾(start_position)位開始搜索; 默認值為1;正數,從前往后查找;負數,從后往前查找;

  第4個參數表示:可選項。要查找的字符串的第幾(th_appearance)次出現; 默認值為1;

  返回值:返回substring在string的位置;如果在字符串中找不到substring,將返回0。

  說明:字符串中的第一個位置是1。

3.解決方案

  方式一:使用instr()函數(推薦使用);

  總數據

  兩個查詢結果一致,由此可見:

  該表不存在重復數據;

  id_card字段在該表的數據都是唯一的。

  正確實現:

 1 SELECT T1.ID_CARD
 2   FROM VIRTUAL_CARD_TEST T1
 3  WHERE INSTR(T1.NAME, '*') > 0
 4 UNION
 5 SELECT T1.ID_CARD
 6   FROM VIRTUAL_CARD_TEST T1
 7  WHERE INSTR(T1.NAME, '#') > 0
 8 UNION
 9 SELECT T1.ID_CARD
10   FROM VIRTUAL_CARD_TEST T1
11  WHERE INSTR(T1.NAME, '/') > 0
12 UNION
13 SELECT T1.ID_CARD
14   FROM VIRTUAL_CARD_TEST T1
15  WHERE INSTR(T1.NAME, '+') > 0
16 UNION
17 SELECT T1.ID_CARD
18   FROM VIRTUAL_CARD_TEST T1
19  WHERE INSTR(T1.NAME, '!') > 0
20 UNION
21 SELECT T1.ID_CARD
22   FROM VIRTUAL_CARD_TEST T1
23  WHERE INSTR(T1.NAME, '.') > 0

  分析:查詢的時候至少要攜帶一個唯一字段(主鍵或id_card),為什么?

  其一:姓名肯定有重復的,但又不能使用關鍵字union進行去重,會導致數據缺失;

  其二:姓名可能包含好幾個特殊字符,每判斷一次,就會疊加一次,會多於實際數據。

  方式二:使用like關鍵字實現。 

4.排除臟數據查詢

  錯誤方式:

  錯在哪?

  當臟數據都包含所有特殊字符時,可以使用該方法。

  正確方式:

5.刪除臟數據

  見文末推薦 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM