首页 > 解决方案 > SQL 提取特殊字符 oracle 11g

问题描述

我有一个要求,我需要获取具有特殊字符的完整数据,包括少数例外。我尝试使用REGEXP_LIKE (STATE,'[^A-Za-z0-9, ]') 但无法得出结果。

1) 以下是不能为空白或有特殊字符的关键字段。

一个。名称1

湾。名称2

C。联系人1

d。地址1

e. 地址2

F。城市

G。英石

H。压缩

2) 供应商不允许的特殊字符包括

, . / ? < > ; : ‘ “ [ ] \ | { } ! @ # $ % ^ & * ( ) - _ = +

例外 #1 - Name1,Name2,Contact1 字段允许以下- ‘ .

例外 #2 - 地址 1、地址 2 允许关注 # /

选择查询:

 select Name1, Name2, Contact1, Address1, Address2, City, STATE, Zip 
 from tableA

标签: sqlregexoraclevalidation

解决方案


您正在尝试查找所有带有特殊字符的行,对吗?尝试这个。

select Name1, Name2, Contact1, Address1, Address2, City, STATE, Zip 
 from tableA
 where regexp_instr(name1 || name2 || contact1, '[^.[:alnum:], -'']') > 0
   or regexp_instr(address1 || address2, '[^[:alnum:], #/]') > 0
   or regexp_instr(city || state || zip, '[^[:alnum:], ]') > 0

我建议[:alnum:]在这里使用,因为如果您设置了 NLS_SORT,A-Z可能会出现不可预测的行为。如果您不担心这一点,则A-Za-z0-9工作方式非常相似。


推荐阅读