替换SQL中指定字符

function montageSQL(sqlStr, params) {
      // 确定日期格式,例如:2024-01,2024/01
      // const regexDate = /^(\d{4})([-\/\.])(\d{2})$/;
      // if (
      //   !regexDate.test(params.startDate) ||
      //   !regexDate.test(params.endDate)
      // ) {
      //   return "日期格式参数缺失或错误";
      // }

      // 正则
      let parameterTemplateRegex = /<parameter>(.*?)<\/parameter>/g,
        paramsRegex = /\$\{([^\}]+)\}/g;

      // 判断是否包含"<parameter>"字符串
      if (sqlStr.includes("<parameter>")) {
        let sqlStrSplit = sqlStr.split(parameterTemplateRegex);
        console.log(sqlStrSplit);
        return sqlStrSplit
          .map((item, index) => {
            // console.log(item);
            let startDate = params.startDate
                ? params.startDate.split(params.startDate.charAt(4))
                : [],
              endDate = params.endDate
                ? params.endDate.split(params.endDate.charAt(4))
                : [];
            return item.replace(
              paramsRegex,
              (_, variableName, offset, string) => {
                console.log(variableName);
                return params[variableName] || undefined;
              }
            );
            // return item
            //   .replaceAll("${开始年份}", startDate[0])
            //   .replaceAll("${开始月份}", startDate[1])
            //   .replaceAll("${截止年份}", endDate[0])
            //   .replaceAll("${截止月份}", endDate[1])
            //   .replaceAll("${设区市名称}", params.city);
          })
          .filter((item, index) =>
            index >= 1 ? !item.includes("undefined") : item
          )
          .join("");
      } else {
        return sqlStr.replace(
          paramsRegex,
          (_, variableName) => params[variableName] || ""
        );
      }
    }

    // let sql =
    //   "SELECT a.id,to_date(a.nd || '-' || a.yd || '-01', 'YYYY-MM-DD') as nyr,a.dybm as 地域编码,a.ajlymc as 案件来源,a.jgdxmlbm as 监管对象目录编码,a.jgdxmlmc as 处罚行为,a.sl as 数量,b.sqsmc as 设区市,b.xqmc as 县区,b.dymc as 地域名称 from gxmpa_xyda.sjck_jcba_ssb a,gxmpa_xyda.sjck_dy_wdb b where a.dybm=b.dybm and b.sqsmc in ('${city}') and b.sqsmc in ('${开始年份}') <parameter> and b.sqsmc in ('${city}') </parameter> and 1=2 <parameter> and b.sqsmc in ('${city}') </parameter> and 1=3";

    // let sql =
    //   "SELECT a.id,to_date(a.nd || '-' || a.yd || '-01', 'YYYY-MM-DD') as nyr,a.dybm as 地域编码,a.ajlymc as 案件来源,a.jgdxmlbm as 监管对象目录编码,a.jgdxmlmc as 处罚行为,a.sl as 数量,b.sqsmc as 设区市,b.xqmc as 县区,b.dymc as 地域名称 from gxmpa_xyda.sjck_jcba_ssb a,gxmpa_xyda.sjck_dy_wdb b where a.dybm=b.dybm <parameter> and concat(a.nd,a.yd) >= concat('${startYear}',case when '${startMonth}'>9 then '${startMonth}' else concat(0,'${startMonth}') end ) and concat(a.nd,a.yd) <= concat('${endYear}',case when '${endMonth}'>9 then '${endMonth}' else concat(0,'${endMonth}') end ) </parameter> <parameter> and b.sqsmc in ('${city}') </parameter>";

    let sql =
      "SELECT CONCAT(b.DYMC,b.DYBM), a.sl FROM GXMPA_XYDA.SJCK_DY_WDB b JOIN (SELECT SUBSTR(a.DYBM,1,${codeLength}) dm, SUM(a.SL) sl FROM GXMPA_XYDA.SJCK_JCBA_SSB a <parameter>WHERE a.DYBM LIKE '${regionCode}%'</parameter> GROUP BY SUBSTR(a.DYBM,1,${codeLength})) a ON b.DYBM = a.dm ORDER BY b.DYBM";
    // const backSQL = montageSQL(sql, {
    //   startYear: "2023",
    //   startMonth: "01",
    //   endYear: "2024",
    //   endMonth: "01",
    //   city: "南宁市",
    // });

    const backSQL = montageSQL(sql, {
      codeLength: 3,
      regionCode: "002",
    });
    console.log(sql);
    console.log(backSQL);
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值