PL/SQL 在多个列和表中查找特殊字符
PL/SQL to find Special Characters in multiple columns and tables
我正在尝试编写一个脚本,我们可以使用该脚本来定位数据列中可能存在的任何特殊字符,句号、破折号或下划线除外,并使用变量。
我的数据 - 员工 table:
---------------------------------------------------------
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';
/
并返回所有行。
知道我做错了什么吗?我只想 select Bob Miller 的行。
正则表达式,正则表达式! ;-)
select * from employees
where translate (first_name, 'x!#$%&()*+/:;<=>?@[\]^`{}|~', 'x') != first_name;
这会将所有特殊字符转换为空,即将它们从字符串中删除 - 从而更改字符串值。
'x' 只是一个技巧,因为如果第三个参数为 null,translate
将无法正常工作。
我正在尝试编写一个脚本,我们可以使用该脚本来定位数据列中可能存在的任何特殊字符,句号、破折号或下划线除外,并使用变量。
我的数据 - 员工 table:
---------------------------------------------------------
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';
/
并返回所有行。
知道我做错了什么吗?我只想 select Bob Miller 的行。
正则表达式,正则表达式! ;-)
select * from employees
where translate (first_name, 'x!#$%&()*+/:;<=>?@[\]^`{}|~', 'x') != first_name;
这会将所有特殊字符转换为空,即将它们从字符串中删除 - 从而更改字符串值。
'x' 只是一个技巧,因为如果第三个参数为 null,translate
将无法正常工作。