我有一个字符串
myString = "C=3;A=1;B=2;"
我试图从中提取A
的值如下
SELECT
SUBSTR(myString,
INSTR(myString, 'A='),
INSTR(myString, ';')-1
) AS val_a
FROM DUAL;
给出了以下结果
+-------+
| Val_A |
+-------+
| A=1 |
+-------+
但我只想要A
的价值。所以我尝试在SUBSTR
SUBSTR(myString,
INSTR(myString, 'A=')+2,
INSTR(myString, ';')-1
)
但那给了我
+-------+
| Val_A |
+-------+
| 1;B |
+-------+
有人可以告诉我如何获得A=
和下一个;
之间的部分吗?
答案 0 :(得分:2)
这可以使用正则表达式和regexp_substr()
with data (mystring) as (
select 'C=3;A=;B=2;' from dual union all
select 'C=3;A=1;B=2;' from dual union all
select 'C=3;A=12;B=2;' from dual union all
select 'C=3;A=123;B=2;' from dual
)
select mystring, regexp_substr(mystring, '(A=)([^\;)]*)', 1, 1, 'i', 2) as aval
from data;
(with data (...)
部分仅用于生成一些测试数据)
返回
MYSTRING | AVAL
---------------+-----
C=3;A=;B=2; |
C=3;A=1;B=2; | 1
C=3;A=12;B=2; | 12
C=3;A=123;B=2; | 123
答案 1 :(得分:1)
没有正则表达式:
WITH data ( mystring ) AS (
SELECT 'C=3;AA=1;A=4;B=2;' FROM DUAL
)
SELECT SUBSTR( mystring, val_a_start, val_a_end - val_a_start ) AS val_a
FROM (
SELECT mystring,
INSTR( mystring, ';A=' ) + 3 AS val_a_start,
INSTR( mystring, ';', INSTR( mystring, ';A=' ) + 3 ) AS val_a_end
FROM (
SELECT ';' || mystring || ';' AS mystring
FROM data
)
)
使用正则表达式:
WITH data ( mystring ) AS (
SELECT 'C=3;AA=1;A=4;B=2;' FROM DUAL
)
SELECT REGEXP_SUBSTR( ';' || mystring || ';', ';A=(.*?);', 1, 1, NULL, 1 ) AS val_a
FROM data