You need to enable JavaScript to run this app. csvjdbc1.0-35执行含Like模糊匹配的Where子句返回空结果问题
优惠活动
大模型
产品
解决方案
定价
更多

csvjdbc1.0-35执行含Like模糊匹配的Where子句返回空结果问题

问题原因
  • 核心原因是csvjdbc 1.0-35版本的默认LIKE语法规则和标准SQL不一致:该版本默认采用类DOS通配符规则,用*匹配任意长度的任意字符、?匹配单个任意字符,没有将%识别为通配符。你写的Like '1%'会被解析为匹配字段值等于1%这个字面量的记录,自然返回空结果集。
  • 次要排查点:如果修改通配符后依然无结果,可检查criteriaField字段的值是否存在前导空格/不可见控制字符,等于判断时你传入的匹配值可能刚好带空格匹配成功,而前缀匹配时会被前导字符阻断。
解决方案
  1. 直接适配默认通配符规则(改动最小)
    将WHERE子句中的通配符从%替换为*即可,修改后的代码如下:
wherePhrase = " Where criteriaField Like '1*'";

该写法不需要修改其他连接配置,可直接生效。

  1. 启用标准SQL92 LIKE语法(兼容常用SQL习惯)
    修改JDBC连接URL,增加likePattern=sql92参数开启标准SQL通配符规则,开启后%会被识别为任意长度通配符、_识别为单个字符通配符,修改后的连接代码如下:
Connection conn = DriverManager.getConnection("jdbc:relique:csv:class:" +
                  MyHTTPReader.class.getName() + "?likePattern=sql92");

配置后你原本写的Like '1%'语句即可正常返回匹配结果。

  1. 字段值含前导字符的修复方案
    如果排查发现是字段值存在前导空格/不可见字符,可以用trim函数清理后再匹配,示例:
wherePhrase = " Where trim(criteriaField) Like '1*'";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:54:01