在DB表列中查找具有前导和尾随空格的值 - Oracle

时间:2014-11-24 11:06:52

标签: sql oracle

我有一个记录,其中有一个列中的前导和空格值。

例如:列值为' D0019 '

我想在where子句中传递这个特定的列。

select * from my_table where my_column='D0019';

由于该值具有空格,因此它不会从where子句中检测到。

如果记录在值中有前导和尾随空格,我怎样才能选择记录?

我的数据库是ORACLE

========================================

更新:

我只有在尝试

时才会获得价值
select * from my_table where my_column like '%D0019%'

甚至没有使用' %D0019% '

=============================================

更新2:

SELECT my_column  ,DUMP(my_column) FROM my_table  WHERE my_column like '%D0019';

输出

"   D0019"  Typ=1 Len=6: 9,68,48,48,49,57

5 个答案:

答案 0 :(得分:1)

select *
from my_table
where trim(my_column) = 'D0019';

修改

根据dump()函数的输出,您的值不仅包含(前导)空格,还包含制表符。 trim()函数只会删除空格字符,但不会删除其他空格。

为了在开头删除任何空格,您需要使用regexp_replace()

select *
from my_table
where regexp_replace(my_column,'^(\s)+','') = 'D0019'

如果您需要摆脱领先的尾随空格,则需要扩展正则表达式:

select *
from my_table
where regexp_replace(my_column,'^(\s)+|(\s)+$','') = 'D0019'

SQLFiddle示例:http://sqlfiddle.com/#!4/3326a/1

答案 1 :(得分:1)

这不是您必须删除的正常空间。它是Horizontal Tab character。 (Ascii 9)。

下面的regexp会删除ASCII范围0-32中的所有字符,这些字符与空格符号相关联。

select * from my_table
 WHERE
     REGEXP_REPLACE(my_column,'['||chr(1)||'-'||chr(32)||']' ) = 'D0019';

More on ASCII table

答案 2 :(得分:1)

似乎很简单(如果我明白的话):

select * from TAB where REGEXP_LIKE (COL,'\s*D0019')

返回“D0019”,“D0019”,“D0019”,“D0019”......等值。

答案 3 :(得分:0)

试试这个;

    select * from my_table where my_column like '%D0019';

答案 4 :(得分:0)

如果您只想在选择开头使用空格,也可以使用此选项:

select * from my_table where my_column like '% %D0019';

select * from my_table where my_column like ' %D0019';