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
相关产品推荐
相关产品推荐

