2014-11-24 43 views
0

我有一个具有领先值和列空间值的记录。在DB表列中查找具有前导空格和尾随空格的值 - Oracle

如:列值' D0019 '

我想通过WHERE子句中这个特定列。

select * from my_table where my_column='D0019'; 

由于该值有空间,所以不会从where子句中检测到。

如何选择记录,即使它在值中具有前导和尾随空格?

我的DB是ORACLE

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

UPDATE:

我得到的价值,只有当我尝试

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 
+0

在查询中使用'trim(my_column)'。此函数删除前导和尾随空格。 – San 2014-11-24 11:11:10

+0

@San trim对我不起作用。这就是为什么我在这里提出这个问题。我也不想用空间或类似条件检查值。我想找到删除空格的确切值。 – user2771655 2014-11-24 11:24:09

+0

@ user2771655你可以试试这个并将输出粘贴到你的问题中吗? 'SELECT my_column,DUMP(my_column)FROM my_table WHERE my_column like'%D0019%';'我猜,它是标签空间或其他东西。我们来看看存储的'ascii'值。 – 2014-11-24 11:27:41

回答

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

+0

它说*原因:正则表达式没有平衡括号。 – user2771655 2014-11-24 12:02:49

+0

@ user2771655尝试更新一个。 – 2014-11-24 12:38:32

0

试试这个;

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

我要找到确切值D0019 – user2771655 2014-11-24 11:26:05

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

+0

这是行不通的。 – user2771655 2014-11-24 11:25:46

+0

我不确定还有什么可以提供给您的。我不知道这个值是如何存储在数据库中的。如果是这样,我必须通过不在我范围内的项目来找到它。请帮助在这里找到问题。 – user2771655 2014-11-24 11:37:38

+0

@ user2771655:看我的编辑 – 2014-11-24 13:26:15

0

也还可以使用t他如果想在开始只为空格选择:

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

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

第一个查询不起作用,但是第二个查询不起作用。但我不想用'%' – user2771655 2014-11-24 11:34:46

1

看起来那样简单(如果我得到它):

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

返回值, 'D0019', 'D0019', 'D0019', 'D0019' .. 。等等。

相关问题