oracle 判断存在字符串中,oracle 判断字符串是否包含指定内容

1.情景展示

如何将表中的包含特殊字符的脏数据查出来?

ee0c6b4162381385b1d7acb9ad1d77a6.png

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()函数(推荐使用);

总数据

2e2c2e2dbe994a456b1795af4b741335.png

两个查询结果一致,由此可见:

该表不存在重复数据;

id_card字段在该表的数据都是唯一的。

正确实现:

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '*') > 0

UNION

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '#') > 0

UNION

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '/') > 0

UNION

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '+') > 0

UNION

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '!') > 0

UNION

SELECT T1.ID_CARD

FROM VIRTUAL_CARD_TEST T1

WHERE INSTR(T1.NAME, '.') > 0

707c93af536955c305057b6af84e9324.png

分析:查询的时候至少要携带一个唯一字段(主键或id_card),为什么?

其一:姓名肯定有重复的,但又不能使用关键字union进行去重,会导致数据缺失;

06d25e24d4f2ee999ba86eb16b71b9fc.png

其二:姓名可能包含好几个特殊字符,每判断一次,就会叠加一次,会多于实际数据。

9909350ac1140265798c494f7b5ed367.png

方式二:使用like关键字实现。

4.排除脏数据查询

错误方式:

549e5aec9b59e2b5feb1a9c093dc7f6e.png

错在哪?

当脏数据都包含所有特殊字符时,可以使用该方法。

正确方式:

1c851c301ec9a728a447dbc6d5ef4441.png

5.删除脏数据

见文末推荐

写在最后

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

相关推荐:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值