2010-07-11 60 views
6

我正在嘗試查找某個列是否需要TRIM函數。Oracle - 查找具有前導空格或尾隨空格的值

如何查看錶中的此列是否具有在實際數據之前或之後有空白的記錄。

+0

你的意思是「空白」還是「空格」?前者包括選項卡,並且接受的答案不會處理該選項卡。 – 2013-07-15 08:22:47

回答

12

您可以使用它的TRIM功能本身,並不是最有效而準確的檢查:

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

但如果你正在檢查,然後轉身反正修剪,你可能只想做到這一點,就像這樣:

Select TRIM(MyColumn) as TrimmedMyColumn 
From TableA 
+2

是的這個工程。但意識到這一點意味着每個查詢都是全表掃描。如果進行大量查詢,請考慮更新數據以使其不含空格。 – bwawok 2010-07-11 13:49:34

+2

@bwawok - +1 - 如果你總是這樣使用它,那麼把它作爲一次性成本並做一次更新是非常好的,但在這種情況下不確定OP的情況。 – 2010-07-11 13:51:15

+0

@bwawok - 或快速全索引掃描。 – 2013-07-15 08:23:35

7

一個快速和骯髒的方式

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

你可以在Oracle中使用regular expressions

例子:

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

你的例子不需要正則表達式 - 它只是'your_column LIKE'%'或your_column LIKE'%''我認爲正則表達式必須是'^ [\ s] +。*'以匹配所有白色空間 – 2010-07-11 13:51:02

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

以下查詢將在表字段T $ DSCA的末尾有尾隨空格時檢索行: SELECT_NAME from TABLE_NAME A WHERE RAWTOHEX(SUBSTR(AT $ DSCA,LENGTH(T $ DSCA),1))= 'A0'和TRIM(T $ DSCA)不爲空;

+1

考慮描述你的解決方案,而不是_「這是代碼,再見。」_ – gitsitgo 2016-10-05 15:00:47

+0

歡迎來到Stack Overflow!雖然這段代碼可能有助於解決這個問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 – 2016-10-05 15:11:10

0

那麼,爲什麼你不能使用以下找到領先的空間?我已經能夠以這種方式識別帶有空格的記錄,並使用'%'來查找尾部空格。

SELECT mycolumn 
FROM my_table 
WHERE mycolumn LIKE ' %' 

我也用以下刪除這兩個前緣和後位

Update My_table set Mycolumn = TRIM(Mycolumn) 

這似乎工作得很好。

相關問題