Oracle PL / SQL REGEXP_LIKE / REGEXP_INSTR

时间:2009-09-14 04:34:41

标签: sql regex oracle plsql oracle10g

我需要一种检查字符串是否具有以下确切模式的方法,即:

(P)

这样的例子是:

'测试系统(P)'

不确定如何检查没有'(P)'的字符串的情况,即:

'测试系统(教授的GUI)' - 在这种情况下,这将是假的,但我使用的是REGEXP_LIKE,它实际上返回TRUE。

我只希望它在搜索字符串中存在'(P)'的确切字符串时返回True。

使用PL / SQL实现这一目标的任何帮助都会很棒。

感谢。

3 个答案:

答案 0 :(得分:4)

使用:

REGEX_LIKE(t.column, '\(P\)')

Regular-Expressions.info是一个很好的资源。

常规INSTR可行(Oracle 8i +):

WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)'

WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)'

LIKE也有效:

WHERE t.column LIKE '%(P)%' --column contains '(P)'

WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)'

答案 1 :(得分:2)

尝试like

WHERE thing like '%(P)%';

答案 2 :(得分:0)

我会坚持使用REGEXP_*函数,因为你无论如何都需要练习它们,知道正则表达式会很好地为你服务。

他们都是很好的答案,除了小马的第一个回答中的拼写错误。 :

错误是REGEX_LIKE中缺少 P

写作:REGEX_LIKE(t.column, '\(P\)')

正确:REGEXP_LIKE(T.COLUMN, '\(P\)')

'\'是一个转义字符,表示“不要寻找下一个字符的符号含义,而是寻找文字字符本身。”