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

REGEXP_REPLACE函数工作原理及SQL正则表达式语法解析咨询

解析这条UPDATE语句中REGEXP_REPLACE的工作机制

先从整体看,这条语句的核心是把TEMP表中data字段的JSON格式内容,剥离掉所有键名和结构符号,只保留值的部分,存入data_value字段。下面拆解每一部分的作用:

1. 外层UPDATE结构

UPDATE (SELECT data,data_value FROM TEMP) t SET t.DATA_VALUE=...

这是一种常见的表更新写法(比如Oracle数据库常用这种子查询方式更新),本质就是直接更新TEMP表的data_value字段,赋值为后面两次正则替换处理后的结果。

2. 第一次REGEXP_REPLACE:移除JSON键名

REGEXP_REPLACE(t.data, '"\w+":','')

我们逐个解析这个正则表达式"\w+":的含义:

  • 双引号":正则里双引号不是特殊元字符,所以这里就是匹配原始字符串里的双引号本身。
  • \w+:你已经了解的,匹配1个或多个单词字符(字母、数字、下划线),对应JSON里的键名(比如"name":里的name)。
  • 冒号::匹配原始字符串里的冒号本身。

所以整个正则的作用是匹配所有形如"键名":的字符串片段,然后替换为空字符串,也就是把JSON里的键名和后面的冒号全部删掉。

举个例子:如果data的原始值是{"name":"Alice","age":30,"gender":"female"},第一次替换后会变成:
"Alice",30,"female"}

3. 第二次REGEXP_REPLACE:移除剩余的结构符号

REGEXP_REPLACE(..., '{|}|"','')

这里的正则{|}|"是用|表示“或”的逻辑,匹配三种字符:

  • {:左大括号
  • }:右大括号
  • ":双引号

替换为空字符串的作用就是把第一次替换后剩下的所有JSON结构符号全部删掉。用上面的例子继续:
第一次替换后的"Alice",30,"female"}经过这次替换后,会变成:
Alice,30,female

完整工作流程总结

拿一个完整的输入输出示例来看:

  • 原始data值:{"id":123,"username":"johndoe","active":true}
  • 第一次替换后:123,"johndoe",true}
  • 第二次替换后:123,johndoe,true
    最终这个结果会被存入data_value字段。

需要注意的是:这个正则只针对键名是纯单词字符(字母、数字、下划线)的JSON结构,如果键名包含连字符、空格等非\w匹配的字符(比如"user-name":"jane"),那么"\w+":就无法匹配这类键,对应的"user-name":片段不会被移除。

内容的提问来源于stack exchange,提问作者SF..MJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:57