Oracle SQL通配符未返回预期结果集问题排查
问题原因与解决方法
核心问题是混淆了=运算符和LIKE关键字的作用:
- 使用
=时,Oracle会将'%98511'视为完整的字符串进行精确匹配,只会返回ident_num字段值完全等于%98511的记录,而你的数据中只有值为98511的行,因此返回0行。 - 要让
%作为通配符(匹配任意前缀字符,包括无字符)生效,必须使用LIKE关键字替代=。
正确的SQL语句
select * from my_table where ident_num LIKE '%98511';
这条语句会匹配所有以98511结尾的ident_num值,自然会返回你预期的1行结果。
额外注意事项
- 如果需要匹配包含
%符号的字符串,使用=时直接写即可;但使用LIKE时需要对%进行转义,例如:LIKE '%\%%' ESCAPE '\'。 - 确认
ident_num字段为字符类型(如VARCHAR2),若为数值类型,使用LIKE会触发隐式类型转换,可能影响查询性能。
内容的提问来源于stack exchange,提问作者glez
相关产品推荐
相关产品推荐

