我正在查询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