如何在 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