Oracle PL / SQL REGEXP_LIKE / REGEXP_INSTR
Domanda
Ho bisogno di un mezzo per verificare se una stringa ha il seguente modello esatto al suo interno, cioè:
(P)
Esempi in cui ciò sarebbe vero è:
"Test System (P)"
Non sono sicuro di come verificare la presenza di casi in cui la stringa che non ha "(P)", ovvero:
"Test System (GUI for Prof)" - in questo caso, questo sarebbe falso ma sto usando REGEXP_LIKE e in realtà restituisce VERO.
Voglio solo che ritorni True quando la stringa esatta di '(P)' esiste all'interno della stringa di ricerca.
Qualsiasi aiuto per raggiungere questo obiettivo utilizzando PL / SQL sarebbe eccezionale.
Grazie.
Soluzione
Usa:
REGEX_LIKE(t.column, '\(P\)')
Regular-Expressions.info è un'ottima risorsa.
Il normale INSTR funzionerebbe (Oracle 8i +):
WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)'
WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)'
Anche LIKE funziona:
WHERE t.column LIKE '%(P)%' --column contains '(P)'
WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)'
Altri suggerimenti
Prova come
:
WHERE thing like '%(P)%';
Vorrei attenermi alle funzioni REGEXP_ *
, dato che dovrai comunque esercitarle e sapere che le espressioni regolari ti serviranno bene.
Sono tutte buone risposte, tranne un refuso nella prima risposta di Ponies. :
L'errore di battitura è che manca una P da REGEX_LIKE:
Scritto: REGEX_LIKE (t.column, '\ (P \)')
Corretto: REGEXP_LIKE (T.COLUMN, '\ (P \)')
"\" è un carattere di escape che dice "non cercare il significato simbolico del personaggio successivo, ma cercare il carattere letterale stesso." "