You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informix函数中LIKE运算符参数传递方法及无结果问题排查

在Informix函数中使用LIKE运算符传递参数的解决方案

我来帮你理清这个问题,先看看你代码里的核心问题,再给你正确的实现方式:

你的函数无结果的原因

在WHERE vendor_desc like 'vv_vendor_desc'这行代码里,你把参数名用单引号括起来了——这会让Informix把它当成固定的字符串字面量,也就是它在找vendor_desc完全等于vv_vendor_desc的记录,而不是使用你传入的参数值做模糊匹配。这就是为什么得不到预期结果的关键原因。

正确的LIKE参数传递方式

根据需求不同,有两种常见的正确写法:

场景1:参数本身已包含通配符

如果调用函数时,传入的参数已经带了%或_这类通配符(比如用户传入%科技%),直接引用参数即可,不需要加单引号:

WHERE vendor_desc LIKE vv_vendor_desc

场景2:函数内部自动添加通配符

如果希望不管用户传入什么值,都自动实现前后模糊匹配,需要用Informix的字符串拼接运算符||来组合参数和通配符:

WHERE vendor_desc LIKE '%' || vv_vendor_desc || '%'

修正后的完整函数示例

CREATE FUNCTION neura_omega_stg.grn_vendor_name_search(vv_vendor_desc Varchar(50)) 
RETURNING Varchar(15),Varchar(100);
DEFINE v_vendor_id VARCHAR(15);
DEFINE v_vendor_desc VARCHAR(100);
FOREACH cursor1 FOR
    SELECT vendor_id,vendor_desc INTO v_vendor_id,v_vendor_desc
    FROM master_vendor_tbl
    -- 这里用内部添加通配符的方式,实现前后模糊匹配
    WHERE vendor_desc LIKE '%' || vv_vendor_desc || '%'
    RETURN v_vendor_id,v_vendor_desc WITH RESUME;
END FOREACH;
END FUNCTION;

额外注意事项

  • 如果你需要前缀匹配(比如科技%)或后缀匹配(比如%科技),只需要调整通配符的位置即可;
  • 确保参数和变量的命名不要冲突(你的代码里参数是vv_vendor_desc,变量是v_vendor_desc,这点处理得没问题);
  • 注意Varchar的长度限制,避免拼接后的字符串超出字段允许的长度。

内容的提问来源于stack exchange,提问作者Shangeetha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:31:13