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

SQL查询LIKE子句如何使用占位符?预编译语句问号写法是否可行

结论

你写的'?%?'写法不能正常生效,不可以这么用。


原因说明

  • 预编译语句的?占位符不能被包裹在单引号内部:被单引号包裹的所有内容都会被数据库解析为普通字符串字面量,写'?%?'的话数据库会把它当成「以问号开头、中间包含任意字符、以问号结尾」的匹配规则,不会把?识别为需要替换的参数占位符。

正确实现方案

对应你原本':name%:id'的匹配需求(即匹配「第一个参数值开头 + 任意字符 + 第二个参数值结尾」的规则),有两种通用的实现方式:

方案1:SQL层面用拼接函数(推荐,兼容性最好)

直接在SQL语句中通过数据库原生函数拼接参数和通配符:

select * from Table1 where Identifier = 'ABC' and Identifier_Type like CONCAT(?, '%', ?)

按顺序传入两个参数即可,不需要额外处理参数值,MySQL、PostgreSQL、SQL Server、Oracle等主流数据库都支持CONCAT函数。

方案2:业务代码侧拼接参数

SQL中只保留单个占位符:

select * from Table1 where Identifier = 'ABC' and Identifier_Type like ?

在代码层传入参数前,自行把值拼接为第一个参数值 + "%" + 第二个参数值的格式再传入即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:27:03