2016-06-21 66 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打破了一段时间了。但你似乎没有解决实际问题。 –