我们可以创建一个通用的模板函数,能够处理任意SQL语句中的占位符替换。这个函数将接受两个参数:
sqlTemplate
:包含占位符的SQL模板字符串。params
:一个对象数组,每个对象包含name
和value
,用于替换SQL模板中的占位符。
通用模板函数
function replaceSqlPlaceholders(sqlTemplate, params) {// 创建一个映射,存储每个 name 对应的所有 valueconst 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 = `