当键值对存储在单个列中时,使用键从键值对中获取值的函数
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
您可以对其进行参数化,例如
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>
假设我在 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
您可以对其进行参数化,例如
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>