贝利信息

如何使用正则表达式安全移除 SQL 字符串中的列别名(AS 语法)

日期:2026-01-05 00:00 / 作者:心靈之曲

本文介绍如何通过一行正则表达式精准移除 sql 查询字符串中所有 `as alias_name` 形式的列别名,保留原始表达式结构与逗号分隔格式,适用于动态 sql 处理场景。

在构建动态 SQL 或解析 SELECT 子句时,常需剥离列别名(如 AS DOCUMENTO_MAMA),仅保留原始字段或表达式。手动 split('AS') 易出错——它会破坏嵌套括号、字符串字面量(如 ' ' || SPMAMA.NOMBRE2)及跨行结构,且无法区分关键字 AS 与普通文本。

推荐使用不破坏语义的正则替换方案

const sql = `SPMAMA.DOCUMENTO AS DOCUMENTO_MAMA,        
    NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS) AS CARNETSALUS_MAMA,
    NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2, 
    SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2) AS NOMBRE_MAMA`;

const cleanSql = sql.replace(/\s+as\s+[^\s,]+/ig, '');
console.log(cleanSql);
// 输出:
// SPMAMA.DOCUMENTO,        
//     NVL(SPMAMA.CARNETSALUS,SPMAMA_N.CARNETSALUS),
//     NVL(SPMAMA.NOMBRE1 || ' ' || SPMAMA.NOMBRE2 || ' ' || SPMAMA.APELLIDO1 || ' ' || SPMAMA.APELLIDO2, 
//     SPMAMA_N.NOMBRE1 || ' ' || SPMAMA_N.NOMBRE2 || ' ' || SPMAMA_N.APELLIDO1 || ' ' || SPMAMA_N.APELLIDO2)

正则详解

⚠️ 注意事项

此方法简洁、高效、无依赖,是前端预处理 SQL 字符串的首选实践。