我正在查詢Oracle(JDE)數據庫中的部件號。如果我使用條款WHERE Item LIKE 'AS-%'
,它會正確返回以「AS-」開頭的所有項目。但是,當我試圖通過改爲使用子句WHERE Item LIKE 'AS-%A'
來縮小該集合以便找到與該圖案匹配並以'A'結尾的所有部件時,即使它們確實存在,我也沒有得到結果!Oracle通配符不匹配?
什麼給?
我正在查詢Oracle(JDE)數據庫中的部件號。如果我使用條款WHERE Item LIKE 'AS-%'
,它會正確返回以「AS-」開頭的所有項目。但是,當我試圖通過改爲使用子句WHERE Item LIKE 'AS-%A'
來縮小該集合以便找到與該圖案匹配並以'A'結尾的所有部件時,即使它們確實存在,我也沒有得到結果!Oracle通配符不匹配?
什麼給?
當你認爲你的查詢基於誤認行查詢您對行值的理解,使用DUMP()函數檢查這些值。
這會告訴你單元格的確切內容,包括你在顯示器上看不到的任何字符。
謝謝,大衛!我沒有想到最後可能會有空位。 – eljefejb
我懷疑列值是否有空格或不可打印的字符。
「AS-%A」必須的工作,如果值actualy與AS-開頭和
結束要進行檢查,請嘗試使用trim(Item) like 'AS-%A'
你爲什麼懷疑? –
也許在您看不到的數據末尾有一些控制字符。嘗試使用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
這是我創建的sqlfiddle:http://sqlfiddle.com/#!4/d8913/1 - 似乎工作。可能你的數據不是你認爲的那樣? – eebbesen
'LIKE'AS-%A''非常完美,您可以粘貼您聲稱與該模式不匹配的記錄嗎?可能是它之間有一些空間。 –
字符串是什麼數據類型?如果它是'CHAR()',請記住它們在字符串末尾填充空格 – Phil