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

如何用RegEx匹配CREATE TABLE语句左括号前的库、Schema及表名

解决方案

要精准提取CREATE TABLE语句中第一个左括号前的库、Schema、表名组合,你可以用以下正则表达式,它会跳过可选的IF NOT EXISTS前缀,只捕获到第一个(之前的标识符部分:

^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([\w.]+)\s*\(

正则拆解

  • ^CREATE\s+TABLE\s+:匹配语句开头的CREATE TABLE,\s+适配任意数量的空格(包括换行)
  • (?:IF\s+NOT\s+EXISTS\s+)?:可选匹配IF NOT EXISTS前缀,(?:...)是非捕获组,不会把这部分内容纳入结果
  • ([\w.]+):核心捕获组,匹配由字母、数字、下划线和点组成的多级标识符(支持任意层级的库/Schema/表结构)
  • \s*\(:匹配第一个左括号前的任意空格,确保只截止到列定义的起始位置

使用示例

假设你有以下SQL语句:

  1. 三级结构(库+Schema+表)

CREATE TABLE my_db.order_schema.user_order (order_id INT, user_id VARCHAR(32));
捕获组1结果:my_db.order_schema.user_order,按.拆分后得到数据库名my_db、Schema名order_schema、表名user_order

  1. 两级结构(Schema+表)

CREATE TABLE product_schema.product_info (id INT, name VARCHAR(100));
捕获组1结果:product_schema.product_info,拆分后得到Schema名product_schema、表名product_info

  1. 单表名

CREATE TABLE temp_log (log_id INT, content TEXT);
捕获组1结果:temp_log,直接为表名

  1. 带IF NOT EXISTS的语句

CREATE TABLE IF NOT EXISTS analytics_db.report_schema.daily_report (date DATE, views INT);
捕获组1结果:analytics_db.report_schema.daily_report

特殊场景适配(可选)

如果你的SQL中有用反引号(MySQL)或双引号(PostgreSQL)包裹的标识符(比如含特殊字符的名称),可以用下面的正则兼容这种情况:

^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?((?:`[^`]+`|"[^"]+"|[\w.])+)\s*\(

它会匹配带引号的标识符,同时兼容普通的字母数字下划线结构。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:18