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

使用NamedParameterJdbcTemplate结合PostgreSQL实现LIKE模糊查询

解决PostgreSQL + NamedParameterJdbcTemplate模糊查询语法错误问题

以下是几种适配你现有代码结构的可行方案:

方式一:SQL中用字符串连接符拼接%(推荐)

直接通过PostgreSQL的||连接符在SQL里将%与占位符拼接,参数仅传入实际要匹配的关键词(无需带%)。

修改后的SQL片段示例:

WHERE 1=1
and ( CAST(rf.date AS varchar) LIKE '%' || :date || '%' OR 'getAll' = :date )
and ( CAST(krr.id AS varchar) LIKE '%' || :id || '%' OR 'getAll' = :id )

参数传入规则:模糊查询传具体关键词(如"2024"),查询全部传"getAll"。

方式二:使用PostgreSQL的CONCAT函数拼接

若习惯用函数实现拼接,可使用CONCAT函数,语法如下:

WHERE 1=1
and ( CAST(rf.date AS varchar) LIKE CONCAT('%', :date, '%') OR 'getAll' = :date )
and ( CAST(krr.id AS varchar) LIKE CONCAT('%', :id, '%') OR 'getAll' = :id )

逻辑与方式一完全一致,参数同样只需传具体关键词或"getAll"。

方式三:参数直接传入带%的字符串

若坚持在参数中传入"%xxx%"格式的值,需调整SQL的逻辑判断,确保getAll分支与模糊查询分支互不冲突:

WHERE 1=1
and ( 
    'getAll' = :date OR 
    CAST(rf.date AS varchar) LIKE :date 
)
and ( 
    'getAll' = :id OR 
    CAST(krr.id AS varchar) LIKE :id 
)

参数传入规则:模糊查询传"%2024%",查询全部传"getAll"。

注意事项

  • 若字段本身为varchar类型,可去掉CAST转换,减少不必要的性能损耗。
  • 三种方案均基于NamedParameterJdbcTemplate的参数绑定机制,不存在SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:16