2010-07-11 25 views
6

Estoy tratando de encontrar si una determinada columna requiere la función TRIM en ella.Oracle: búsqueda de valores con espacios iniciales o finales

¿Cómo puedo averiguar si esta columna en una tabla tiene registros que tienen espacios en blanco antes o después de los datos reales?

+0

¿Se refiere a "espacio en blanco" o "espacio"? El primero incluye pestañas, y la respuesta aceptada no manejará eso. –

Respuesta

12

se puede comprobar mediante la función TRIM en sí, no es el más eficiente, pero precisa:

Select * 
From TableA 
Where MyColumn <> TRIM(MyColumn) 

Aunque si usted está comprobando luego dar la vuelta para recortar todos modos, es probable que desee hacerlo en primer lugar, así:

Select TRIM(MyColumn) as TrimmedMyColumn 
From TableA 
+2

sí esto funciona. pero date cuenta de que esto significa que cada consulta es un escaneo completo de la tabla. Si realiza muchas consultas, considere actualizar sus datos para que no tengan espacios. – bwawok

+2

@bwawok - +1 - Si siempre lo está usando así, es tremendamente mejor hacer que sea una vez el costo y hacer una actualización, no estaba seguro de la situación de los OP en este caso. –

+0

@bwawok - o un escaneo completo de índice completo. –

7

Una manera rápida y sucia

WHERE LENGTH(TRIM(COL1)) <> LENGTH(COL1) 
1

Usted podría utilizar regular expressions en Oracle.

Ejemplo:

select * from your_table 
where regexp_like(your_column, '^[ ]+.*') 
    or regexp_like(your_column, '.*[ ]+$') 
+1

Su ejemplo no necesita Regex: simplemente sería 'your_column LIKE '%' OR your_column LIKE '%'' Creo que el Regex woul; d necesita ser '^ [\ s] +. *' Para que coincida con todos los blancos espacio –

-1
select data1, length(data1)-length(replace(data1,' ','')) from t; 
-1

La siguiente consulta recuperará las filas cuando uno de los campos de la tabla T $ DSCA tiene espacios al final: SELECCIONAR * de TABLE_NAME A WHERE RAWTOHEX (SUBSTR (AT $ DSCA, LENGTH (T $ DSCA), 1)) = 'A0' Y TRIM (T $ DSCA) no son nulos;

+1

Considere describir su solución en lugar de _ "aquí está el código, adiós". _ – gitsitgo

+0

¡Bienvenido a Stack Overflow! Aunque este código puede ayudar a resolver el problema, no explica "por qué" y/o "cómo" responde la pregunta. Proporcionar este contexto adicional mejoraría significativamente su valor educativo a largo plazo. Por favor [edite] su respuesta para agregar una explicación, incluyendo qué limitaciones y suposiciones se aplican. –

0

¿Por qué no puede usar lo siguiente para encontrar los espacios iniciales? Pude identificar los registros con espacios principales de esta manera y usar '%' para encontrar los espacios finales.

SELECT mycolumn 
FROM my_table 
WHERE mycolumn LIKE ' %' 

También he utilizado las siguientes acciones para eliminar tanto el líder y los espacios finales

Update My_table set Mycolumn = TRIM(Mycolumn) 

que parece funcionar muy bien.

Cuestiones relacionadas