【发布时间】:2015-03-03 23:41:19
【问题描述】:
我有一列具有以下值,
User_Id=446^User_Input=L307-60#/25" AP^^
我正在尝试根据指定的键获取每个单独的值。
- User_Id= 之后的所有值,直到遇到 ^
- User_Input= 之后的所有值,直到遇到 ^
我试过了,到目前为止我有这个,
SELECT LTRIM(REGEXP_SUBSTR('User_Id=446^User_Input=L307-60#/25" AP^'
,'[0-9]+',1,1),'^') User_Id
from dual
如何获取 User_Input 的值?
P.S:用户输入可以包含任何内容,例如 ',"、*、%,包括字符串中间的 ^(即,不作为分隔符)。
任何帮助将不胜感激..
【问题讨论】:
-
如果“用户输入可以有任何东西”你确定它不能有^吗?如果它可以有一个插入符号,你如何区分作为数据一部分的插入符号和充当分隔符的插入符号?是否有理由需要使用正则表达式而不是
INSTR和SUBSTR? -
你是对的,用户输入可以有^,应用程序没有停止阻止他们输入。我只是在尝试使用正则表达式的方法,如果您可以建议一种使用 INSTR 和 SUBSTR 的方法,那也很棒..
-
这种字符串看起来像是 xml 文档元素中经过修改的一组属性。如果您正在解析 xml,那么使用 Oracle 的 XML 解析功能是有价值的。
-
如果你有字符串 "User_Id=446^User_Input=L^307-^60^#/25" AP^" 你想返回什么?你想修改你发布的算法吗?当它找到第一个插入符号并读取到字符串末尾而忽略最后一个插入符号时它不会停止?如果我们实现您指定的算法,我们将只返回“L”。可能还有其他键/值对在
User_Input之后? -
我不久前就这个主题写了一个答案 - 它获取给定字符串中的所有
name=value对:stackoverflow.com/a/28597947