2010-07-11 136 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) 

这似乎工作得很好。

相关问题