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

如何根据键的出现位置获取键值对中对应的目标值

获取键对应值的SQL方案

假设你的表中key字段存储的是类似key1<>值1|key2<>值2|key5<>961|...格式的字符串(键值对用|分隔,键与值用<>分隔),可以通过以下两种方式获取key5对应的961:

方法1:使用基础字符串函数(兼容多数数据库)

SELECT 
  SUBSTR(
    `key`,
    -- 计算值的起始位置:key5<>的起始位置加上自身长度
    INSTR(`key`, 'key5<>', 1, 1) + LENGTH('key5<>'),
    -- 计算值的长度:找到后续第一个|的位置,或取到字符串末尾
    CASE 
      WHEN INSTR(`key`, '|', INSTR(`key`, 'key5<>', 1, 1)) > 0 
      THEN INSTR(`key`, '|', INSTR(`key`, 'key5<>', 1, 1)) - (INSTR(`key`, 'key5<>', 1, 1) + LENGTH('key5<>'))
      ELSE LENGTH(`key`) - (INSTR(`key`, 'key5<>', 1, 1) + LENGTH('key5<>')) + 1
    END
  ) AS key5_value
FROM your_table;

逻辑说明:

  • 先用INSTR定位key5<>的起始位置,加上key5<>的长度得到对应值的起始索引。
  • 通过判断后续是否存在|分隔符,确定值的结束位置,从而截取到完整的对应值。

方法2:使用正则表达式(部分数据库支持,如Oracle、MySQL 8.0+)

如果你的数据库支持正则表达式截取,可以用更简洁的写法:

Oracle 版本

SELECT REGEXP_SUBSTR(`key`, 'key5<>([^|]+)', 1, 1, NULL, 1) AS key5_value
FROM your_table;

MySQL 版本

SELECT REGEXP_SUBSTR(`key`, 'key5<>([^|]+)', 1, 1, 'c', 1) AS key5_value
FROM your_table;

逻辑说明:

  • 正则表达式key5<>([^|]+)匹配key5<>后直到第一个|的所有字符,最后一个参数指定提取括号内的捕获组内容,也就是对应的数值部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:35:59