我需要使用oracle 11g中的sql从存储在文本字段中的键/值对中提取值。
我可以使用
来检测“钥匙” SELECT *
FROM mytable
WHERE valuet2 LIKE '%' || chr(10) || 'F;' || '%'
但是我不知道这是执行搜索的最佳方法,而且我不知道如何返回可变长度的值(直到但不包括回车)。
这是我需要搜索并从中提取值的文本字段。
;Please Select;*
E;Expelled
F;Expelled Following Suspension
N;In-School Suspension
S;Out-of-School Suspension
BS;Bus Suspension
101;Detention
130;Conference / Warning
131;Parent Contact / Conference
200;Loss of Recess
我正在查询存储“键”的单独表,因此我需要从此文本字段中进行查找以确定该键值代表什么。我将把这个查询推送到其他将具有其键/值对的唯一组合的其他服务器,但我无法预料它们可能是什么。因此,我无法编写解码。
答案 0 :(得分:1)
您可以使用正则表达式函数并利用'm'
修饰符,该修饰符指示Oracle将^
和$
视为行首和行尾。锚点(而不是仅在字符串的开头和结尾进行匹配)。像这样:
select regexp_substr(valuet2, '^F;(.*)$', 1, 1, 'm', 1)
from mytable
where regexp_like(valuet2, '^F;', 'm')
;
简要演示:
create table mytable (valuet2 varchar2(4000));
insert into mytable(valuet2) values(
';Please Select;*
E;Expelled
F;Expelled Following Suspension
N;In-School Suspension
S;Out-of-School Suspension
BS;Bus Suspension
101;Detention
130;Conference / Warning
131;Parent Contact / Conference
200;Loss of Recess'
);
select regexp_substr(valuet2, '^F;(.*)$', 1, 1, 'm', 1) as myval
from mytable
where regexp_like(valuet2, '^F;', 'm')
;
MYVAL
----------------------------------------
Expelled Following Suspension
这里F
是硬编码的,但是您可以将其替换为绑定变量。查询需要稍作调整。如果需要帮助,请回信。
答案 1 :(得分:0)
我不是100%知道您要寻找的东西,但是
从mytable中选择substr(valuet2,length(:val)+2) valuet2喜欢的地方:val || ';%';
将在;之后获取所有内容;之前匹配的地方:val