当键值对存储在单个列中时,使用键从键值对中获取值的函数

时间:2018-04-04 16:35:10

标签: oracle plsql keyvaluepair

想象一下,我在Oracle数据库中有一个具有以下结构的表。

ID  Name    Attributes
1   Rooney  <Foot=left>, <height=5>, <country=England>
2   Ronaldo <Foot=Right>, <height=6>, <country=Portugal> 

我想创建一个函数,当我传入我需要的属性的ID,Name和Key时,可以返回特定属性的值。这可能。

我试图用来确定玩家鲁尼的脚的函数里面的查询是这样的。

       SELECT Attributes
       AS tmpVar
       FROM Players 
       WHERE id = 1 AND Name = 'Rooney' and Attributes like '%Foot%';  

显然它会提供所有属性,但我只想要他的脚属性。这是我在这里的第一个问题所以请原谅如果我犯了任何新手错误和建议如何提出更好的问题。

2 个答案:

答案 0 :(得分:0)

您可以使用REGEXP_SUBSTR

(.+?)使用非贪婪匹配捕获value,检索为1(最后一个参数)

select REGEXP_SUBSTR(Attributes,'<Foot=(.+?)>',1,1,NULL,1) as Foot 
FROM Players 

Demo

答案 1 :(得分:0)

您可以参数化,例如

SQL> with players (id, name, attributes) as
  2    (select 1, 'Rooney', '<Foot=left>, <height=5>, <country=England>' from dual union
  3     select 2, 'Ronaldo', '<Foot=Right>, <height=6>, <country=Portugal>' from dual
  4    )
  5  select name,
  6    replace(regexp_substr(attributes, '&&attribute=\w+'), '&&attribute=') result
  7  from players
  8  where id = 1;
Enter value for attribute: Foot

NAME       RESULT
---------- --------------------
Rooney     left

SQL> undefine attribute
SQL> /
Enter value for attribute: country

NAME       RESULT
---------- --------------------
Rooney     England

SQL>