2010-07-11 9 views
6

Belirli bir sütunun üzerinde TRIM işlevinin bulunup bulunmadığını bulmaya çalışıyorum.Oracle - önde gelen veya sondaki boşluklarla değerleri bulma

Tablodaki bu sütunun, gerçek verilerden önce veya sonra beyaz boşluk bulunan kayıtlara sahip olup olmadığını nasıl anlarım.

+0

"Boşluk" veya "boşluk" mu demek istediniz? Birincisi sekmeleri içerir ve kabul edilen cevap bunu çözmez. –

cevap

12

Bunu doğru TRIM en verimli çalışmıyorsa kendisi ama kullanarak kontrol edebilirsiniz:

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

rağmen yine de kesmek için etrafında dönen daha sonra kontrol ediyoruz eğer, Muhtemelen ilk etapta bunu yapmak istersiniz:

Select TRIM(MyColumn) as TrimmedMyColumn 
From TableA 
+2

evet bu çalışır. Ancak bunun, her sorgu tam bir tablo taraması olduğu anlamına geldiğini anlayın. Çok fazla sorgu yapıyorsanız, verilerinizin boşluk olmaması için güncellenmesini düşünün. – bwawok

+2

@bwawok - +1 - Her zaman böyle kullanıyorsanız, bunu bir kerelik bir maliyet haline getirmek ve bir güncelleme yapmak için olağanüstü derecede daha iyiyse, bu durumda OP'lerin durumundan emin değildi. –

+0

@bwawok - veya hızlı tam dizin taraması. –

7

Sen Oracle'da regular expressions kullanabilirsiniz hızlı ve kirli yolu

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

.

Örnek:

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

Örneğiniz Regex'e ihtiyaç duymaz - Sadece '' your_column LIKE '%' YA DA LÜTFEN '%' 'diyorum, Regex woul'u düşünürüm;' beyaz olmak için '^ [\ s] +. * 'Olmalıdır. boşluk –

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

Aşağıdaki tablodan biri, T $ DSCA Tablo alanlarından birinin sonunda boşluk bıraktığı sorguları alır: SELECT *, TABLE_NAME kaynağından A WHERE RAWTOHEX (SUBSTR (AT $ DSCA, LENGTH (T $ DSCA), 1)) = 'A0' VE TRIM (T $ DSCA) boş değil;

+1

Çözümünüzü "burada kod, hoşçakal" yerine açıklamayı düşünün. _ – gitsitgo

+0

Yığın Taşması'na Hoş Geldiniz! Bu kod problemi çözmeye yardımcı olsa da, _why_ ve/veya _how_ 'un bu soruya cevap vermediğini açıklamıyor. Bu ek bağlamı sağlamak uzun vadeli eğitim değerini önemli ölçüde artıracaktır. Lütfen, hangi sınırlamaların ve varsayımların geçerli olduğu dahil, açıklama eklemek için cevabınızı [düzenleyin]. –

0

Neden önde gelen alanları bulmak için aşağıdakileri kullanamazsınız? Kayıtları bu şekilde önde gelen boşluklarla tanımlayabildim ve sondaki boşlukları bulmak için '%' kullanabildim.

SELECT mycolumn 
FROM my_table 
WHERE mycolumn LIKE ' %' 


Ben de öncü ve sadece iyi iş gibi görünüyor sonundaki boşlukları

Update My_table set Mycolumn = TRIM(Mycolumn) 

hem kaldırmak için aşağıdaki kullandım.

İlgili konular