如何在Postgres的FORMAT函数中使用包含%的LIKE匹配模式?
在FORMAT()函数中嵌入LIKE语法的正确写法
问题分析
你当前的SQL代码FORMAT(' AND student_name LIKE %%L% ', CAST(jsnData->>'term' AS VARCHAR) )存在两处问题:
%%L%的写法会生成AND student_name LIKE 'xxx'%,右侧通配符%未被包含在单引号内,触发语法错误- 若需前后模糊匹配,缺少左侧的通配符
%
解决方案
方法1:在参数中拼接通配符
将通配符与查询参数拼接后传入FORMAT函数,利用%L自动添加单引号:
FORMAT(' AND student_name LIKE %L ', '%' || CAST(jsnData->>'term' AS VARCHAR) || '%');
生成的SQL片段为AND student_name LIKE '%查询内容%',完全符合LIKE语法要求。
方法2:在FORMAT模板中处理通配符
通过双单引号转义,在模板中直接包含通配符:
FORMAT(' AND student_name LIKE ''%%%L%%'' ', CAST(jsnData->>'term' AS VARCHAR));
''解析为单个'%%解析为单个%%L替换为带单引号的参数值
最终同样生成正确的模糊匹配片段。
注意事项
- 若仅需前缀/后缀模糊匹配,可调整通配符位置,比如只保留
'%' || 参数或参数 || '%' - 使用
%L能自动处理参数中的单引号转义,避免SQL注入风险,比直接字符串拼接更安全
内容的提问来源于stack exchange,提问作者C47_C0D3R
相关产品推荐
相关产品推荐

