Oracle正则表达式从表中提取行

时间:2015-03-11 20:20:02

标签: sql regex database oracle

我必须从一个表中提取行,其中列值包含除字母,数字,连字符,下划线,空格和逗号之外的任何其他内容。如果它只有上面提到的字符,它不应该拉行。谢谢你的帮助。

我正在尝试regexp_like,但是没有得到理想的结果。

REGEXP_LIKE(col, '[^[:alnum:]]|(^-)|(^,)|[^[:space:]]|(^_)')

例如:

TD-6 TTY-60X3APTNO DAY  => should not retrieve
TY-2YYTY 20TRH TY L/W   => Should retrieve
TIRREG CL3- HARDWARE &  => Should retrieve

2 个答案:

答案 0 :(得分:5)

使用Oracle's regex conventions

REGEXP_LIKE(col, '[^[:alnum:] _,-]')

Here's a SQLFilddle

括号的工作方式是括号内的任何内容都匹配,或者如果您使用插入符号(^)引导括号中的项目,则除括号中的内容之外的任何内容都匹配。

答案 1 :(得分:3)

您想要的所有不是字母数字,下划线,逗号或连字符?那是对的吗?那你想要这样的东西:

REGEXP_LIKE(col, '[^A-Za-z0-9_ ,-]')

测试:

WITH d1 AS (
    SELECT 'TD-6 TTY-60X3APTNO DAY' AS col FROM dual
     UNION ALL
    SELECT 'TY-2YYTY 20TRH TY L/W' FROM dual
     UNION ALL
    SELECT 'TIRREG CL3- HARDWARE &' FROM dual
)
SELECT col FROM d1
 WHERE REGEXP_LIKE(col, '[^A-Za-z0-9_ ,-]')

返回:

TY-2YYTY 20TRH TY L/W
TIRREG CL3- HARDWARE &