sql从字符串中取出指定的值

siwluxuefeng 2017-02-14 03:33:16
如何从字符串中取出指定的值?如字符串中以 & 分割字段,需要取出 miss=3,5的值,返回 3,5 .用什么函数?
oher字段里,
status=200&body_bytes_sent=45&remote_addr=10.235.43.53&miss=3,5&hit=0,3
...全文
701 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoguanzhao 2017-02-14
  • 打赏
  • 举报
回复
仅供参考 with t as (select 'status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3' other from dual ) select substr(t.other,instr(t.other,'miss=')+5,instr(t.other,'hit')-instr(t.other,'miss=')-6), instr(t.other,'miss=')+5,instr(t.other,'hit')-instr(t.other,'miss=')-6,t.other from t;
流浪川 2017-02-14
  • 打赏
  • 举报
回复

SELECT REPLACE(OUTPUT, 'miss=', '')
  FROM (SELECT REGEXP_SUBSTR(OTHER, '[^&]+', 1, LEVEL) AS OUTPUT
          FROM MAP
        CONNECT BY LEVEL <= LENGTH(OTHER) - LENGTH(REPLACE(OTHER, '&')) + 1)
 WHERE OUTPUT LIKE 'miss=%'
流浪川 2017-02-14
  • 打赏
  • 举报
回复
引用 4 楼 Linzhongyilisha 的回复:
[quote=引用 1 楼 hidanger521 的回复:]
SELECT REPLACE(OUTPUT, 'miss=', '')
  FROM (SELECT REGEXP_SUBSTR('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                             '[^&&]+',
                             1,
                             LEVEL) AS OUTPUT
          FROM DUAL
        CONNECT BY LEVEL <= LENGTH('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3') -
                   LENGTH(REPLACE('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                                           '&')) - 4)
 WHERE OUTPUT LIKE 'miss=%'
你好,我的map表里有个other字段,字符串长度不定,格式为如下: status=200&body_bytes_sent=45&remote_addr=10.235.43.53&miss=3,5&hit=0,3 我需要从map表的oter字段里,解析出miss=3,5的值,返回3,5,插入新表里。这个查询sql怎么写,逻辑是什么,谢谢[/quote] [code=sql][/SELECT REPLACE(OUTPUT, 'miss=', '') FROM (SELECT REGEXP_SUBSTR(OTHER, '[^&]+', 1, LEVEL) AS OUTPUT FROM MAP CONNECT BY LEVEL <= LENGTH(OTHER) - LENGTH(REPLACE(OTHER, '&')) + 1) WHERE OUTPUT LIKE 'miss=%'code]
siwluxuefeng 2017-02-14
  • 打赏
  • 举报
回复
引用 1 楼 hidanger521 的回复:
SELECT REPLACE(OUTPUT, 'miss=', '')
  FROM (SELECT REGEXP_SUBSTR('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                             '[^&&]+',
                             1,
                             LEVEL) AS OUTPUT
          FROM DUAL
        CONNECT BY LEVEL <= LENGTH('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3') -
                   LENGTH(REPLACE('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                                           '&')) - 4)
 WHERE OUTPUT LIKE 'miss=%'
你好,我的map表里有个other字段,字符串长度不定,格式为如下: status=200&body_bytes_sent=45&remote_addr=10.235.43.53&miss=3,5&hit=0,3 我需要从map表的oter字段里,解析出miss=3,5的值,返回3,5,插入新表里。这个查询sql怎么写,逻辑是什么,谢谢
sxq129601 2017-02-14
  • 打赏
  • 举报
回复
可以用instr+substr来截取&miss=
siwluxuefeng 2017-02-14
  • 打赏
  • 举报
回复
你好,我的map表里有个other字段,字符串长度不定,格式为如下: status=200&body_bytes_sent=45&remote_addr=10.235.43.53&miss=3,5&hit=0,3 我需要从map表的oter字段里,解析出miss=3,5的值,返回3,5,插入新表里。这个查询sql怎么写,逻辑是什么,谢谢
流浪川 2017-02-14
  • 打赏
  • 举报
回复
SELECT REPLACE(OUTPUT, 'miss=', '')
  FROM (SELECT REGEXP_SUBSTR('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                             '[^&&]+',
                             1,
                             LEVEL) AS OUTPUT
          FROM DUAL
        CONNECT BY LEVEL <= LENGTH('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3') -
                   LENGTH(REPLACE('status=200&&body_bytes_sent=45&&remote_addr=10.235.43.53&&miss=3,5&&hit=0,3',
                                           '&')) - 4)
 WHERE OUTPUT LIKE 'miss=%'

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧