0

0

如何在 SQL 字符串中仅按“AS”后紧跟的逗号进行安全分割

花韻仙語

花韻仙語

发布时间:2026-02-05 10:44:17

|

121人浏览过

|

来源于php中文网

原创

如何在 SQL 字符串中仅按“AS”后紧跟的逗号进行安全分割

本文介绍一种基于正则表达式断言的 java 字符串分割方案,精准匹配“as”关键字后出现的逗号(忽略大小写),避免误切嵌套括号或函数内部的逗号,适用于解析多行 sql select 子句。

在 SQL 查询字符串解析场景中,常需将 SELECT 子句按列定义拆分为独立表达式。但直接使用 split(",") 会破坏含逗号的函数调用(如 DATE_TRUNC('month', timestamp))或窗口函数(如 OVER(PARTITION BY a, b ORDER BY c))。理想策略是:仅在 AS 关键字之后、作为列别名分隔符的逗号处切分

Java 的 String.split() 不支持无限长度的 (?有限长度量词的兼容型正向后查找:

String[] queryArray = internalQuery.split(
    "(?<=\\s{1,99}[aA][sS]\\s{1,99}\\w{1,99})\\s*,\\s*");

正则详解:

  • (?
  • 1–99 个空白字符(兼容换行、缩进);
  • 大小写不敏感的 AS([aA][sS]);
  • 再跟 1–99 个空白字符;
  • 最后是 1–99 个单词字符(即别名名称,如 month_begin_dt)。
  • \\s*,\\s*:匹配逗号及其前后任意数量的空白(包括换行和制表符),确保分割干净。
  • ⚠️ 注意事项:

    AIEASE
    AIEASE

    多功能AI图像编辑工具

    下载
    • 别名长度上限设为 99 是权衡结果:既满足绝大多数真实 SQL 别名(通常
    • 该正则不处理 AS 被引号包裹的情况(如 "AS" 或 'AS'),若 SQL 中存在带引号的关键字,需先预处理转义或升级为语法树解析(如 JSqlParser)。
    • 输入字符串建议先 trim() 去除首尾空白,并确保换行符为 \n(Windows 环境下可先 .replace("\r\n", "\n"))。

    ? 验证示例:
    对如下输入:

    DATE_TRUNC('month', timestamp) AS month_begin_dt
            ,   FIRST_VALUE(monitorsessionid) OVER(PARTITION BY openpsid,DATE_TRUNC('month', timestamp) ORDER BY timestamp DESC) AS monitorsessionid
            ,   FIRST_VALUE(vrr) OVER(PARTITION BY openpsid,DATE_TRUNC('month', timestamp) ORDER BY timestamp DESC) AS vrr

    执行上述 split() 后,queryArray 将严格返回 3 个元素,每个元素均为完整、语义正确的列表达式,且保留原有缩进与换行格式,便于后续 SQL 构建或元数据提取。

    总结:此方案以轻量正则实现高精度 SQL 片段分割,在工程实践中兼顾准确性、可读性与 JVM 兼容性,是处理类 SQL 字符串结构化解析的可靠起点。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    数据分析工具有哪些
    数据分析工具有哪些

    数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

    833

    2023.10.12

    SQL中distinct的用法
    SQL中distinct的用法

    SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    330

    2023.10.27

    SQL中months_between使用方法
    SQL中months_between使用方法

    在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

    351

    2024.02.23

    SQL出现5120错误解决方法
    SQL出现5120错误解决方法

    SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

    1386

    2024.03.06

    sql procedure语法错误解决方法
    sql procedure语法错误解决方法

    sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

    365

    2024.03.06

    oracle数据库运行sql方法
    oracle数据库运行sql方法

    运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

    963

    2024.04.07

    sql中where的含义
    sql中where的含义

    sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

    581

    2024.04.29

    sql中删除表的语句是什么
    sql中删除表的语句是什么

    sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

    427

    2024.04.29

    C++ 多线程编程与线程池设计
    C++ 多线程编程与线程池设计

    本专题深入讲解 C++ 中的多线程编程与线程池设计,涵盖 C++11/14/17 的线程库、线程同步机制(mutex、condition_variable、atomic)、线程池设计模式、任务调度与优化、并发瓶颈分析与解决方案。通过多个实际案例,帮助开发者掌握 如何设计高效的线程池管理系统,提升 C++ 程序在高并发场景下的性能与稳定性。

    0

    2026.02.05

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Kotlin 教程
    Kotlin 教程

    共23课时 | 3.2万人学习

    C# 教程
    C# 教程

    共94课时 | 8.6万人学习

    Java 教程
    Java 教程

    共578课时 | 57.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号