我有一栏包含以下值,
User_Id=446^User_Input=L307-60#/25" AP^^
我试图基于指定的键获取每个单独的值。
我尝试过,到目前为止,我有这个,
SELECT LTRIM(REGEXP_SUBSTR('User_Id=446^User_Input=L307-60#/25" AP^'
,'[0-9]+',1,1),'^') User_Id
from dual
如何获取User_Input的值?
PS:用户输入可以^
在字符串中间包含',“,*,%之类的任何内容(包括a)(即,不作为分隔符)。
任何帮助将不胜感激..
使用无聊的旧INSTR来计算KEY和VALUE字符串的起点和终点的偏移量,可以轻松解决此问题。
技巧是使用可选的出现参数来标识的每个正确实例=
。因为输入可以包含插入符,但不能将它们用作分隔符,因此我们需要使用负数来标识最后一个^
。
with cte as (
select kv
, instr(kv, '=', 1, 1)+1 as k_st -- first occurrence
, instr(kv, '^', 1) as k_end
, instr(kv, '=', 1, 2)+1 as v_st -- second occurrence
, instr(kv, '^', -1) as v_end -- counting from back
from t23
)
select substr(kv, k_st, k_end - k_st) as user_id
, substr(kv, v_st, v_end - v_st) as user_input
from cte
/
这是证明它有效的必要SQL Fiddle。我认为这比任何正则表达式都容易理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句