2014-11-24 48 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' .. 。等等。

相關問題