IBM Informix SQL中LIKE模糊查询匹配结果异常问题求助
问题根因
这是IBM Informix数据库LIKE运算符的默认匹配规则导致的:
默认情况下,Informix执行LIKE匹配时,会自动将待匹配的字段值右侧填充空格至与模式串长度一致后再做校验。你使用的模式串'3 %'长度为3,值为'3'的qty字段会被自动填充1个空格变为'3 ',填充后的字符串恰好符合'3 %'的匹配逻辑(3+空格+任意字符,%可匹配空内容),所以会被误返回。
你使用trim(qty)仍然无效的原因是:trim仅会删除原字符串本身的前后空格,处理后的'3'还是会在LIKE匹配阶段被自动补空格对齐模式串长度,无法规避默认规则的影响。
解决方案
你可以任选以下一种方法修复:
- 方法1:临时关闭当前会话的
LIKE尾部空格自动填充规则,执行配置后再运行原查询即可:SET IFX_LIKE_TRAILING_SPACES 0; - 方法2:改用子串匹配+长度校验的逻辑,完全避开
LIKE的默认规则影响:SELECT * FROM `order` WHERE SUBSTR(qty, 1, 2) = '3 ' AND LENGTH(qty) > 2; - 方法3:使用Informix自带的
MATCHES运算符替代LIKE,该运算符不会自动填充尾部空格,对应通配符用*代替%即可:SELECT * FROM `order` WHERE qty MATCHES '3 *';
额外提示:
order是SQL标准保留字,作为表名使用时建议加引号包裹,避免不必要的语法错误。
内容的提问来源于stack exchange,提问作者stan
相关产品推荐
相关产品推荐

