sql - PL/SQL 在多个列和表中查找特殊字符

标签 sql regex oracle special-characters regexp-like

我正在尝试编写一个脚本,我们可以使用该脚本来定位数据列中可能存在的任何特殊字符(句点、破折号或下划线除外),并使用变量。

我的数据 - 员工表:

---------------------------------------------------------
 ID |   LASTFIRST | LAST_NAME | FIRST_NAME | MIDDLE_NAME
---------------------------------------------------------
 57 | Miller, Bob |    Miller |   &^$#*)er |      NULL
 58 |  Smith, Tom |     Smith |        Tom |         B
 59 |  Perry, Pat |     Perry |         P. |    Andrew

我的脚本:

VAR spchars VARCHAR  
spchars := '!#$%&()*+/:;<=>?@[\\\]^`{}|~'

select *
  from (select dcid, LastFirst, Last_Name, First_Name, middle_name,    
          CASE WHEN REGEXP_LIKE(First_Name, '[ || spchars || ]*$' )
               THEN '0' ELSE '1' END AS FNSPC 
          from employees)
 where FNSPC = '0';
 /

并且返回所有行。

知道我在这里做错了什么吗?我只想选择 Bob Miller 的行。

最佳答案

REGEXP,Schmegexp! ;-)

select * from employees
where translate (first_name, 'x!#$%&()*+/:;<=>?@[\]^`{}|~', 'x') != first_name;

这会将所有特殊字符转换为空,即从字符串中删除它们 - 从而更改字符串值。

“x”只是一个技巧,因为如果第三个参数为空,translate 就无法按照您的意愿工作。

关于sql - PL/SQL 在多个列和表中查找特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809722/

相关文章:

ruby - 如何进行 'or' 匹配但不捕获正则表达式中的 'or' 部分?

php - 复制 preg 替换为 javascript

database - 是否可以在 oracle 中使用 SYS_REFCURSOR 打印 1,2,3......n?

java - org.apache.tomcat.dbcp.dbcp.SQLNestedException : Cannot create PoolableConnectionFactory ( 'v$session.osuser' , 值为 'x' )

sql - 数据库设计——什么时候拆分表?

sql - 如何从每组的前一行获取列值?

regex - 我需要通过 shell 脚本评论一个具有精确模式匹配的文件

mysql - 如果列值不在一组不同列的值中,则 SQL 选择行

用于数据库支持集合的 Java 库

oracle - 在生产中使用 Babel - 如何预编译脚本