我们可以创建一个通用的模板函数,能够处理任意SQL语句中的占位符替换。这个函数将接受两个参数:
sqlTemplate
:包含占位符的SQL模板字符串。params
:一个对象数组,每个对象包含name
和value
,用于替换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:替换 day
和 hour
const sqlTemplate = `