0
点赞
收藏
分享

微信扫一扫

前端处理sql参数替换问题,即使有重复参数,也可以按顺序替换

念川LNSC 2024-12-02 阅读 12

我们可以创建一个通用的模板函数,能够处理任意SQL语句中的占位符替换。这个函数将接受两个参数:

  1. sqlTemplate:包含占位符的SQL模板字符串。
  2. params:一个对象数组,每个对象包含namevalue,用于替换SQL模板中的占位符。

通用模板函数

function replaceSqlPlaceholders(sqlTemplate, params) {
   
  // 创建一个映射,存储每个 name 对应的所有 value
  const paramMap = {
   };
  params.forEach(param => {
   
    if (!paramMap[param.name]) {
   
      paramMap[param.name] = [];
    }
    paramMap[param.name].push(param.value);
  });

  // 定义一个正则表达式来匹配 ${placeholder} 格式的占位符
  const placeholderRegex = /\$\{(\w+)\}/g;

  // 使用正则表达式替换 SQL 模板中的占位符
  let finalSql = sqlTemplate.replace(placeholderRegex, (match, placeholder) => {
   
    // 获取对应的值列表
    const values = paramMap[placeholder] || [];

    // 如果有值,则返回第一个值并从数组中移除
    if (values.length > 0) {
   
      return values.shift();
    }

    // 如果没有值,保留原占位符(或可以选择抛出错误)
    console.warn(`No value found for placeholder: ${
     match}`);
    return match;
  });

  return finalSql;
}

使用示例

示例 1:替换 dayhour
const sqlTemplate = `
举报

相关推荐

0 条评论