2012-03-07 80 views
20

me gustaría crear una consulta en la que seleccionar todos los registros que contienen caracteres que no son az o AZOracle SQL - REGEXP_LIKE contiene caracteres distintos de az o AZ

así que algo como esto

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '![A-Z] [a-z]')

+1

IIRC, tratan 'NO REGEXP_LIKE()', aunque eso es para MySQL. – Bojangles

+1

@JamWaffles Si lo entiendo, el OP está buscando resultados que contengan cualquier carácter no alfa. Por lo tanto, un 'NOT' solo devolvería filas que contengan _no_ caracteres alfabéticos. –

+1

@Michael ¡Vaya! Gracias por notar eso Me siento bastante tonto ahora. – Bojangles

Respuesta

33

El ^ niega una clase de caracteres:

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '[^A-Za-z]') 
+0

Cuando ejecutamos eso, devolvemos registros como 'AB Future'. ¿Estamos haciendo algo mal? Ejecutando la misma consulta que la anterior ... FYI tengo una pregunta similar abierta en http://stackoverflow.com/questions/30948012/oracle-query-to-find-string-not-containing-characters –

+1

@Marcus El patrón se ve para cualquier carácter que no sean letras mayúsculas/minúsculas, y su espacio en blanco solo coincide. No exige que la cadena contenga _only_ no letras. Si debe asegurarse de que coincidan _no_ caracteres que no sean letras, ancle la expresión regular como '^ [^ A-Za-z] + $' - Creo que eso es lo que está preguntando. El patrón anclado no debe coincidir debido al espacio. –

+0

Básicamente estoy buscando una cadena que tenga caracteres _otros_ que AZ, az junto con caracteres adicionales como 0-9, ',', '-', etc. –

9

Algo así como

select * 
    from foo 
where regexp_like(col1, '[^[:alpha:]]') ; 

debería funcionar

SQL> create table foo(col1 varchar2(100)); 

Table created. 

SQL> insert into foo values('abc'); 

1 row created. 

SQL> insert into foo values('abc123'); 

1 row created. 

SQL> insert into foo values('def'); 

1 row created. 

SQL> select * 
    2 from foo 
    3 where regexp_like(col1, '[^[:alpha:]]') ; 

COL1 
-------------------------------------------------------------------------------- 
abc123 
Cuestiones relacionadas