如何在 Oracle PLSQL 中使用 INSTR 中的提取值
How to use a fetched value in INSTR in Oracle PLSQL
我正在尝试创建一个 view,它结合了两个 tables A 和 B 来获取数据。
该视图的主要功能是解码 A 在其列之一中的值
Name~LastName~DOB~placeofBirth
我们可以看到字符串被~分隔
特殊字符 ~ 在 table B 中但也被编码。
&~*+
我的任务是从 Table B 中获取第二个字符,然后用它来将 A 中的值分隔为单独的值。
由于我们不能在视图中声明变量,我可以在哪里存储〜字符以将其与值进行比较
下面是我尝试执行的操作的示例,但出现了错误
SELECT
Substr(B.SpecialCharecterss,2,1) Delimiter,
SUBSTR(A.CodedString,1, INSTR(A.CodedString, Delimiter, 1, 1) -1) , //Throws error here
// Similarly other fields
您可以使用 regexp_substr()
:
select regexp_substr(coded_string,
replace('[^X]+', 'X', substr(chars, 2, 1)),
1, 2)
from (select 'Name~LastName~DOB~placeofBirth' as coded_string, '&~*+' as chars from dual) b
最后一个参数是您想要coded_string
中的哪个字段。
一种选择是使用常见的 table 表达式:
WITH cteDelimiter AS (SELECT Substr(B.SpecialCharecterss,2,1) AS Delimiter
FROM B)
SELECT SUBSTR(A.CodedString, 1, INSTR(A.CodedString, d.Delimiter, 1, 1) - 1)
FROM A
CROSS JOIN cteDelimiter d
我正在尝试创建一个 view,它结合了两个 tables A 和 B 来获取数据。 该视图的主要功能是解码 A 在其列之一中的值
Name~LastName~DOB~placeofBirth
我们可以看到字符串被~分隔 特殊字符 ~ 在 table B 中但也被编码。
&~*+
我的任务是从 Table B 中获取第二个字符,然后用它来将 A 中的值分隔为单独的值。 由于我们不能在视图中声明变量,我可以在哪里存储〜字符以将其与值进行比较
下面是我尝试执行的操作的示例,但出现了错误
SELECT
Substr(B.SpecialCharecterss,2,1) Delimiter,
SUBSTR(A.CodedString,1, INSTR(A.CodedString, Delimiter, 1, 1) -1) , //Throws error here
// Similarly other fields
您可以使用 regexp_substr()
:
select regexp_substr(coded_string,
replace('[^X]+', 'X', substr(chars, 2, 1)),
1, 2)
from (select 'Name~LastName~DOB~placeofBirth' as coded_string, '&~*+' as chars from dual) b
最后一个参数是您想要coded_string
中的哪个字段。
一种选择是使用常见的 table 表达式:
WITH cteDelimiter AS (SELECT Substr(B.SpecialCharecterss,2,1) AS Delimiter
FROM B)
SELECT SUBSTR(A.CodedString, 1, INSTR(A.CodedString, d.Delimiter, 1, 1) - 1)
FROM A
CROSS JOIN cteDelimiter d