2009-09-14 70 views
1

我需要检查,看是否有串在其内具有下列精确模式,即一种手段:的Oracle PL/SQL REGEXP_LIKE/REGEXP_INSTR

(P) 

例子在那里,这将是真实的是:

“测试系统(P)”

不确定虽然如何检查案件时不会有“(P)”的字符串,即:

“测试系统(GUI的教授)” - 在这种情况,这会b假,但我使用REGEXP_LIKE,它实际上返回TRUE。

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

任何使用PL/SQL实现这个功能的帮助都很好。

谢谢。

回答

4

用途:

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

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

定期INSTR将工作(甲骨文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)' 
+0

感谢那个家伙 – tonyf 2009-09-14 05:02:30

+0

小心空出 – 2009-09-14 18:08:55

2

尝试like

WHERE thing like '%(P)%'; 
+0

同意。如果你没有检查正则表达式,为什么要使用REGEXP函数 – 2009-09-14 05:20:59

0

我要坚持REGEXP_*功能,为你无论如何,都需要练习它们,并且知道正则表达式将很好地为您服务。

这些都是很好的答案,除了在小马的第一个答案中的拼写错误。 :

错字的是,有一个P从REGEX_LIKE丢失:

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

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

的 '\' 是转义字符,上面写着“不要不寻找下一个角色的象征意义,而是寻找文字本身。“