2014-01-07 180 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