• 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.删除脏数据

      见文末推荐 

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    常见算法之17---二叉树相等判断以及二叉树的复制
    常见算法之16---二维数组中查找元素
    常见算法之15---求N!末尾有多少个0
    常见算法之14---球放入盒问题
    常见算法之13---跳台阶问题
    常见算法之12---求a^n%p
    DB与java的关联
    重拾python
    Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)
    交换Ctrl和Caps Lock键
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/10064831.html
Copyright © 2020-2023  润新知