以下是一个示例列:
+---------------+
| NAME |
+---------------+
| Jim Jo'nes |
| John $mith |
| Leroy Jenkins |
| Tom & Jerry |
+---------------+
我需要编写一个RegEx模式,它返回包含不包含空格的非字母数字字符的字段。这是一个名称字段,可以包含多个以空格分隔的名称。
我的预期结果集如下:
Jim Jo'nes
John $mith
Tom & Jerry
答案 0 :(得分:0)
使用带有否定字符集的REGEXP_LIKE条件
我首先会关闭使用'&'
来识别变量变量:
set define off;
接下来,我只会识别您不想要的所有字符:
a-z, A-Z, 0-9, \s (the escape version of a space character)
然后我创建一个否定的字符集:
[^a-zA-Z0-9 ]
以下是我的解决方案:
SCOTT@tst>WITH names AS (
2 SELECT
3 'Jim Jo''nes' name
4 FROM
5 dual
6 UNION ALL
7 SELECT
8 'John $mith' name
9 FROM
10 dual
11 UNION ALL
12 SELECT
13 'Leroy Jenkin' name
14 FROM
15 dual
16 UNION ALL
17 SELECT
18 'Tom & Jerry' name
19 FROM
20 dual
21 ) SELECT
22 *
23 FROM
24 names
25 WHERE
26 1 = 1
27 AND
28 REGEXP_LIKE ( names.name,'[^a-zA-Z0-9 ]' );
name
----------
Jim Jo'nes
John $mith
Tom & Jerry