Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-12728:intervallo non valido nell'espressione regolare

Regexp non usa \ per proteggere - in un'espressione parentesi . Devi solo inserire - come primo carattere, subito dopo la parentesi aperta:

IF REGEXP_LIKE('--,,::', '[\-,:]*')
...

=> ORA-12728: invalid range in regular expression

Se sei curioso, quando incontri [\-,:] Oracle comprende:"qualsiasi carattere nell'intervallo da \ a , o il carattere : " . Il motivo per cui questo solleva un'eccezione è \ sembra essere dopo , secondo il loro valore ASCII. E Oracle non accetta intervallo avendo un valore iniziale dopo quello finale.

D'altra parte:

 IF REGEXP_LIKE('--,,::', '[-,:]*')

Funziona come previsto.

Come nota a margine, [-,:]{0,1} che significa "zero o una occorrenza di - o , o : " potrebbe essere scritto [-,:]? .