一种选择是用NULL 替换所有有效的东西,剩下的就是无效:
SQL> with test (col) as
2 (select 'Robert@jr23' from dual union all
3 select 'Kevin#123' from dual union all
4 select 'bob@jr' from dual union all
5 select 'mike$dr' from dual union all
6 select 'Alex-jr' from dual union all
7 select 'Robert''jr' from dual union all
8 select 'Brian jr' from dual
9 )
10 select col
11 From test
12 where regexp_replace(col, '[[:alpha:]]|[[:digit:]]|-|''', null) is not null;
COL
-----------
Robert@jr23
Kevin#123
bob@jr
mike$dr
Brian jr
SQL>
我对您实际上想要得到的结果感到困惑。以下是一些显示此类正则表达式结果的示例;作为结果,您希望获得哪些 ID?
SQL> with test (id, col) as
2 (select 1, 'Robert@jr23' from dual union all
3 select 2, 'Kevin#123' from dual union all
4 select 3, 'bob@jr' from dual union all
5 select 4, 'mike$dr' from dual union all
6 select 5, 'Alex-jr' from dual union all
7 select 6, 'Robert''jr' from dual union all
8 select 7, 'Brian jr' from dual union all
9 select 8, 'Brian10' from dual
10 )
11 select col,
12 regexp_replace(col,
13 '[[:alpha:]]|[[:digit:]]|[[:space:]]|-|''', null) result
14 from test;
COL RESULT
----------- ----------
Robert@jr23 @
Kevin#123 #
bob@jr @
mike$dr $
Alex-jr
Robert'jr
Brian jr
Brian10
8 rows selected.
SQL>
你的一个 cmets 说:
选择必须包含特殊字符或数字的客户名称(空格、连字符和撇号除外)
这意味着数字和特殊字符应该被视为“相等”。如果是这样,这有帮助吗?
SQL> with test (id, col) as
2 (select 1, 'Robert@jr23' from dual union all
3 select 2, 'Kevin#123' from dual union all
4 select 3, 'bob@jr' from dual union all
5 select 4, 'mike$dr' from dual union all
6 select 5, 'Alex-jr' from dual union all
7 select 6, 'Robert''jr' from dual union all
8 select 7, 'Brian jr' from dual union all
9 select 8, 'Brian10' from dual
10 )
11 select id, col
12 from test
13 where regexp_replace(col, '[[:alpha:]]|[[:space:]]|-|''', '')
14 is not null;
ID COL
---------- -----------
1 Robert@jr23
2 Kevin#123
3 bob@jr
4 mike$dr
8 Brian10
SQL>