Oracle PL / SQL REGEXP_LIKE / REGEXP_INSTR

问题描述 投票:1回答:3

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

(P)

这是正确的示例是:

Test System (P)

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

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

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

如何在PL / SQL中执行此操作?

sql regex oracle plsql oracle10g
3个回答
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)'

类似也可以使用:

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

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

2
投票

尝试like

WHERE thing like '%(P)%';

0
投票

我会坚持使用REGEXP_*函数,因为无论如何您都需要练习它们,并且知道正则表达式将很适合您。

它们都是很好的答案,除了小马的第一个答案有错字。 :

错别字是REGEX_LIKE中缺少P

书面:REGEX_LIKE(t.column, '\(P\)')

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

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

© www.soinside.com 2019 - 2024. All rights reserved.