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

SQL:如何从无序键值对字符串中提取指定字段值

提取指定键对应的值(SQL实现)

通用思路

核心是定位[someNum]=后的内容,截取到下一个键值对的起始标识(,[)或字符串结尾。以下是主流数据库的具体实现:

MySQL/MariaDB(8.0+)

使用REGEXP_SUBSTR函数捕获目标值:

SELECT REGEXP_SUBSTR(your_column_name, '\\[someNum\\]=([^,]+)', 1, 1, 'e') AS someNum_value
FROM your_table_name;

说明:

  • \\[someNum\\]:转义匹配[someNum](方括号是正则特殊字符)
  • ([^,]+):捕获等号后所有非逗号的字符,直到下一个键值对的逗号
  • 参数'e'指定返回捕获组的内容

PostgreSQL

用REGEXP_MATCHES提取捕获组,取数组第一个元素:

SELECT (REGEXP_MATCHES(your_column_name, '\[someNum\]=([^,]+)'))[1] AS someNum_value
FROM your_table_name;

或者用REGEXP_REPLACE替换无关内容:

SELECT REGEXP_REPLACE(your_column_name, '.*\[someNum\]=([^,]+).*', '\1') AS someNum_value
FROM your_table_name;

SQL Server

正则方式(2017+)

SELECT REGEXP_SUBSTR(your_column_name, '\[someNum\]=([^,]+)', 1, 1, 0, 1) AS someNum_value
FROM your_table_name;

兼容低版本的字符串截取写法

SELECT SUBSTRING(
    your_column_name,
    CHARINDEX('[someNum]=', your_column_name) + LEN('[someNum]='),
    CHARINDEX(',[', your_column_name, CHARINDEX('[someNum]=', your_column_name)) 
    - (CHARINDEX('[someNum]=', your_column_name) + LEN('[someNum]='))
) AS someNum_value
FROM your_table_name
WHERE your_column_name LIKE '%[someNum]=%';

Oracle

使用REGEXP_SUBSTR指定捕获组:

SELECT REGEXP_SUBSTR(your_column_name, '\[someNum\]=([^,]+)', 1, 1, NULL, 1) AS someNum_value
FROM your_table_name;

注意事项

  • 如果目标值可能包含逗号,可将正则调整为\[someNum\]=([^\[]+),匹配到下一个[前的内容
  • 低版本数据库需优先使用字符串截取的兼容写法,避免依赖正则函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:48:30