2009-09-14 6 views
1

je besoin d'un moyen de vérifier si une chaîne a le motif exact suivant son sein, à savoir:Oracle PL/REGEXP_LIKE SQL/REGEXP_INSTR

(P) 

exemples où cela serait vrai est:

'système de test (P)'

pas sûr que la façon de vérifier les cas lorsque la chaîne qui n'a pas '(P)', à savoir:

'test System (GUI pour Prof)' - dans ce cas, ce serait b e faux mais j'utilise REGEXP_LIKE et il retourne TRUE. Je veux seulement qu'il renvoie Vrai quand la chaîne exacte de '(P)' existe dans la chaîne de recherche.

Toute aide réalisant ceci en utilisant PL/SQL serait grande.

Merci.

Répondre

4

Utilisation:

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

Regular-Expressions.info est une excellente ressource.

régulier INSTR travaillerait (Oracle 8i +):

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

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

COMME fonctionne aussi:

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

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

merci pour ce gars – tonyf

+0

Attention aux Nulls –

2

Essayez like:

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

D'accord. Si vous ne recherchez pas une expression régulière, pourquoi utiliser les fonctions REGEXP –

0

Je collerait avec REGEXP_* fonctions, comme vous Je vais devoir les pratiquer de toute façon, et connaître les expressions régulières vous servira bien.

Ce sont toutes de bonnes réponses, à l'exception d'une faute de frappe dans la première réponse de Ponies. :

La faute de frappe est qu'il ya un P manque de REGEX_LIKE:

écrit: REGEX_LIKE(t.column, '\(P\)')

Correct: REGEXP_LIKE(T.COLUMN, '\(P\)')

Le '\' est un caractère d'échappement qui dit « don Ne cherchez pas la signification symbolique du personnage suivant, mais cherchez le caractère littéral lui-même. "