You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取SQL字符串中单引号包裹的自定义列名内容

提取SQL中AS后单引号包裹的自定义列名方法

实现步骤

  • 第一步:截取FROM之前的SELECT子句片段
    你已经完成了SQL拆分,取拆分后的第一个元素即可,排除后续JOIN、WHERE等片段中无关单引号的干扰:
    String selectPart = sqlRequest.split("FROM")[0];
    
  • 第二步:用正则表达式匹配目标内容
    基础场景可以直接用正则'([^']+)'匹配所有单引号包裹的内容,如果要避免误匹配SELECT子句中的普通字符串常量,只精准匹配AS关键字后的别名,可以调整为正则AS\\s*'([^']+)',捕获组1即为你需要的自定义列名。

完整代码示例:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SqlAliasExtractor {
    public static void main(String[] args) {
        // 测试用SQL示例
        String sql1 = "SELECT COUNT(project_id) AS 'count', project.name AS 'projects' FROM test JOIN project ON project_id = project.id";
        String sql2 = "SELECT count(*) AS 'browsers' FROM `test`";
        
        List<String> aliases1 = extractAliases(sql1);
        List<String> aliases2 = extractAliases(sql2);
        
        // 输出结果分别为 [count, projects] 和 [browsers]
        System.out.println(aliases1);
        System.out.println(aliases2);
    }
    
    private static List<String> extractAliases(String sqlRequest) {
        List<String> aliases = new ArrayList<>();
        String selectPart = sqlRequest.split("FROM")[0];
        // 精准匹配AS后的单引号别名,避免误抓普通字符串
        Pattern pattern = Pattern.compile("AS\\s*'([^']+)'", Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(selectPart);
        while (matcher.find()) {
            aliases.add(matcher.group(1));
        }
        return aliases;
    }
}

如果业务场景存在别名带转义单引号(SQL中用两个连续单引号表示单引号本身)、别名用双引号/反引号包裹的情况,对应调整正则规则即可适配。

内容的提问来源于stack exchange,提问作者Денис Задорожний

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:05