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

使用fmt或std::format动态构建SQL查询语句的问题

正确构建动态SQL WHERE子句(基于fmt库)

你之前的尝试错误在于未正确处理元素格式化与拼接逻辑:

  • 第一种写法直接用param=@p{} OR 作为分隔符拼接ids元素,导致元素未被格式化,分隔符错误插入到元素前后
  • 第二种写法仅将join后的整体字符串替换到单个{}中,无法为每个id生成独立的param=@pN片段

正确实现方式

方法1:转换每个元素后拼接

#include <fmt/core.h>
#include <fmt/ranges.h>
#include <vector>
#include <numeric>

// 假设input是你的输入容器
std::vector<int> ids(input.size());
std::iota(ids.begin(), ids.end(), 0);

// 先将每个id转为"param=@pN"格式,再用" OR "连接所有片段
std::string clause = fmt::format("{}", fmt::join(
    fmt::views::transform(ids, [](int id) {
        return fmt::format("param=@p{}", id);
    }), 
    " OR "
));

方法2:利用fmt::join的格式化重载(更简洁)

fmt库支持直接为join的每个元素指定格式字符串,无需手动转换:

std::string clause = fmt::format("{}", fmt::join(ids, " OR ", "param=@p{}"));

两种方式最终都会生成形如param=@p0 OR param=@p1 OR ...的SQL子句,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:22:40