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

SQL Adapter LIKE查询无结果无报错问题求助

问题分析与解决

你的问题根源非常明确:LIKE查询缺少通配符(%)。当使用LIKE但不添加通配符时,它的行为和=完全一致——只会匹配完全相等的内容,所以输入"examp"这类部分字符串时自然没有结果返回。

具体问题拆解

看你提供的SQL片段:

SELECT CUST_ID, EMAIL_ADDR, PHONE_NUM, FIRST_NAME, LAST_NAME, ADDR1, ADDR2, CITY_NAME, PROV_ST_CDE, POST_ZIP_CDE, NOTES_TXT, DLR_CDE, ANALYS_TXT 
FROM GS_DBA.CUI_CUST_INFO 
WHERE (lower(EMAIL_ADDR) LIKE lower(?) ...

这里的lower(?)只是把参数转成小写,但没有包裹通配符,数据库会把它当作完整的匹配值来查找,效果和直接用lower(EMAIL_ADDR) = lower(?)完全一样。

修复方案

你需要在参数前后添加%通配符,告诉数据库要匹配包含该字符串的任意内容。修改后的代码应该是这样:

var FIND_CUSTOMER_PREPARED_STATEMENT = WL.Server.createSQLStatement( 
  "SELECT CUST_ID, " + 
  "EMAIL_ADDR, PHONE_NUM, FIRST_NAME, LAST_NAME, ADDR1, ADDR2, CITY_NAME, PROV_ST_CDE, " + 
  "POST_ZIP_CDE, NOTES_TXT, DLR_CDE, ANALYS_TXT FROM " + 
  "GS_DBA.CUI_CUST_INFO WHERE " + 
  "(lower(EMAIL_ADDR) LIKE '%' || lower(?) || '%' OR ..."
);

这里用||来拼接通配符和参数(不同数据库的字符串拼接符可能不同:比如SQL Server用+,MySQL用CONCAT,如果你的数据库不是Oracle这类用||的,要对应调整)。

额外适配提示

  • 如果你只想匹配以输入内容开头的邮箱,就只用前面的%:lower(?) || '%'
  • 如果只想匹配以输入内容结尾的邮箱,就只用后面的%:'%' || lower(?)
  • 也可以用数据库自带的拼接函数增强兼容性,比如MySQL可以写成:CONCAT('%', lower(?), '%')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:57:58