2016-06-21 70 views
0

查詢:選擇查詢不起作用

select * 
from etm 
where emp_id LIKE '009090%' 
    AND directnumber LIKE '111 123 12345x 67%' 
    AND cellnumber LIKE '123456789%' 
    AND phone LIKE '111 123 12345x 67'; 

數據庫:的Oracle 11g

選擇查詢不返回它的任何記錄時LIKE操作有小X形(12345 X)。

當我用任何其他字符(小/大寫)代替它時((12345 Y)),但用小x代替它也不起作用。

我無法修改查詢,插入數據時是否可以在數據庫級別執行任何操作? 我們正在批量導入數據。

+2

愚蠢的問題,但在數據庫中的數據包括小 'X' 字?在Oracle文檔中我沒有看到任何指示'x'在LIKE子句中被特別對待的內容,所以我會假設沒有匹配的行。 –

+0

用「_」替換「x」。你是否在結果集中使用「x」獲取記錄? – Shank

+0

我明白它的一個愚蠢的問題@Lotharyx,但爲什麼當我用Y或X替換x時運行相同的查詢? –

回答

0

我看不到的問題 - 這是一個測試案例來證明:

with sample_data as (select '123x 456' str from dual union all 
        select '123 456' str from dual union all 
        select '123x' str from dual union all 
        select 'abcx 93s' str from dual) 
select * 
from sample_data 
where str like '123x%'; 

STR  
-------- 
123x 456 
123x  

所以,你可以看到那裏的STR柱123x開始我的搜索已經拉回行。

但是,如果我搜索開始123y行則沒有行返回:

with sample_data as (select '123x 456' str from dual union all 
        select '123 456' str from dual union all 
        select '123x' str from dual union all 
        select 'abcx 93s' str from dual) 
select * 
from sample_data 
where str like '123y%'; 

no rows selected. 

,因爲沒有排在海峽柱123y開始。

它是一個類似的案例與您的數據,其中有沒有當你有一個或一個以上的like條件的x匹配所有過濾條件的任何行?

0

我還沒有驗證此查詢,但它應該工作。

select * 
from etm 
where emp_id LIKE '009090%' 
    AND (directnumber LIKE '111%' or directnumber LIKE '123%' .....) 
    AND cellnumber LIKE '123456789%' 
    AND (phone LIKE '111' or phone LIKE '123' .......); 

參考: https://community.oracle.com/thread/1096523?start=0&tstart=0

+0

雖然它不會給出正確的結果。它不會查找'x',並且會爲'directnumber'和'phone'列匹配更多的值,您爲什麼認爲OP正試圖匹配那些列中的多個模式? –

+0

你可以在SQLFiddle上創建示例環境嗎? – Jigar

+0

這不是我的問題;而SQL小提琴已經被Oracle打破了一段時間了。但你似乎沒有解決實際問題。 –