2014-01-07 179 views
0

我正在查詢Oracle(JDE)數據庫中的部件號。如果我使用條款WHERE Item LIKE 'AS-%',它會正確返回以「AS-」開頭的所有項目。但是,當我試圖通過改爲使用子句WHERE Item LIKE 'AS-%A'來縮小該集合以便找到與該圖案匹配並以'A'結尾的所有部件時,即使它們確實存在,我也沒有得到結果!Oracle通配符不匹配?

什麼給?

+2

這是我創建的sqlfiddle:http://sqlfiddle.com/#!4/d8913/1 - 似乎工作。可能你的數據不是你認爲的那樣? – eebbesen

+0

'LIKE'AS-%A''非常完美,您可以粘貼您聲稱與該模式不匹配的記錄嗎?可能是它之間有一些空間。 –

+1

字符串是什麼數據類型?如果它是'CHAR()',請記住它們在字符串末尾填充空格 – Phil

回答

3

當你認爲你的查詢基於誤認行查詢您對行值的理解,使用DUMP()函數檢查這些值。

這會告訴你單元格的確切內容,包括你在顯示器上看不到的任何字符。

+0

謝謝,大衛!我沒有想到最後可能會有空位。 – eljefejb

0

我懷疑列值是否有空格或不可打印的字符。

「AS-%A」必須的工作,如果值actualy與AS-開頭和

結束要進行檢查,請嘗試使用trim(Item) like 'AS-%A'

+0

你爲什麼懷疑? –

0

也許在您看不到的數據末尾有一些控制字符。嘗試使用REGEXP_LIKE:

with x as (
    select 'AS-123B' as col from dual 
    UNION 
    select 'AS-456A' as col from dual 
    UNION 
    select 'AS-789A' || chr(0) as col from dual 
) 
select * from x 
where regexp_like (col, 'AS-(.*)A[[:cntrl:]]?') 

輸出:

COL 
AS-456A 
AS-789A