2010-07-11 13 views
6

Sto cercando di trovare se una determinata colonna richiede la funzione TRIM.Oracle: ricerca di valori con spazi iniziali o finali

Come posso sapere se questa colonna in una tabella contiene record che contengono spazi bianchi prima o dopo i dati effettivi.

+0

Intendi "spazio bianco" o "spazio"? Il primo include schede e la risposta accettata non lo gestirà. –

risposta

12

si può controllare usando la funzione TRIM in sé, non il più efficiente, ma precisa:

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

Anche se si sta controllando poi voltarsi di tagliare in ogni caso, probabilmente lo vuoi semplicemente fare in un primo momento, in questo modo:

Select TRIM(MyColumn) as TrimmedMyColumn 
From TableA 
+2

sì, questo funziona. ma rendersi conto che questo significa che ogni query è una scansione completa della tabella. Se fai molte domande, considera l'opportunità di aggiornare i tuoi dati per non avere spazi. – bwawok

+2

@bwawok - +1 - Se lo si utilizza sempre in questo modo è tremendamente meglio farne un costo una tantum e fare un aggiornamento, non era sicuro della situazione degli OP in questo caso. –

+0

@bwawok - o una scansione dell'indice completa veloce. –

7

Un modo rapido e sporco

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

Si potrebbe utilizzare regular expressions in Oracle.

Esempio:

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

Il tuo esempio non ha bisogno di Regex - Sarebbe semplicemente 'your_column LIKE '%' O tuo_column LIKE '%'' Penso che il Regex non abbia bisogno di essere '^ [\ s] +. *' Per abbinare tutto il bianco spazio –

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

La query seguente recupererà le righe quando uno dei campi tabella T $ DSCA presenta spazi finali alla fine: SELECT * da TABLE_NAME A WHERE RAWTOHEX (SUBSTR (AT $ DSCA, LENGTH (T $ DSCA), 1)) = 'A0' AND TRIM (T $ DSCA) non è nullo;

+1

Considera di descrivere la tua soluzione anziché _ "ecco il codice, addio." _ – gitsitgo

+0

Benvenuto in Stack Overflow! Sebbene questo codice possa aiutare a risolvere il problema, non spiega _why_ e/o _how_ che risponde alla domanda. Fornire questo contesto aggiuntivo migliorerebbe significativamente il suo valore educativo a lungo termine. Si prega di [modificare] la risposta per aggiungere una spiegazione, compresi quali limitazioni e ipotesi si applicano. –

0

Quindi perché non è possibile utilizzare quanto segue per trovare gli spazi iniziali? Sono stato in grado di identificare i record con gli spazi iniziali in questo modo e usare '%' per trovare gli spazi finali.

SELECT mycolumn 
FROM my_table 
WHERE mycolumn LIKE ' %' 

Ho anche usato il seguente per rimuovere sia il leader e gli spazi finali

Update My_table set Mycolumn = TRIM(Mycolumn) 

che sembra funzionare bene.

Problemi correlati