Oracle - RegEx模式,用于返回包含空格的非字母数字字符的记录

时间:2017-05-12 15:43:32

标签: sql regex oracle

以下是一个示例列:

+---------------+
|     NAME      |
+---------------+
| Jim Jo'nes    |
| John $mith    |
| Leroy Jenkins |
| Tom & Jerry   |
+---------------+

我需要编写一个RegEx模式,它返回包含不包含空格的非字母数字字符的字段。这是一个名称字段,可以包含多个以空格分隔的名称。

我的预期结果集如下:

Jim Jo'nes
John $mith
Tom & Jerry

1 个答案:

答案 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