想象一下,我在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%';
显然它会提供所有属性,但我只想要他的脚属性。这是我在这里的第一个问题所以请原谅如果我犯了任何新手错误和建议如何提出更好的问题。
答案 0 :(得分:0)
您可以使用REGEXP_SUBSTR
(.+?)
使用非贪婪匹配捕获value
,检索为1(最后一个参数)
select REGEXP_SUBSTR(Attributes,'<Foot=(.+?)>',1,1,NULL,1) as Foot
FROM Players
答案 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>