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

Function to get the value from a key value pair by using the key when the key value pairs are stored in a single column

假设我在 Oracle 数据库中有一个具有以下结构的 table。

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

我想创建一个函数,当我传入我需要的属性的 ID、名称和键时,可以在其中 return 特定属性的值。可以吗

我试图用来确定球员鲁尼的脚的函数中的查询是这样的。

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

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

你可以使用REGEXP_SUBSTR

(.+?) 使用 non-greedy 匹配捕获 value,检索为 1(最后一个参数)

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

Demo

您可以对其进行参数化,例如

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>