簡體   English   中英

如何在 Oracle PLSQL 的 INSTR 中使用獲取的值

[英]How to use a fetched value in INSTR in Oracle PLSQL

我正在嘗試創建一個結合兩個表 A 和 B 來獲取數據的視圖 此視圖的主要 function 是解碼 A 在其列之一中的值

Name~LastName~DOB~placeofBirth

如我們所見,字符串由~分隔,特殊字符~在表 B 中,但也已編碼。

&~*+

我的任務是從表 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中的哪個字段。

一種選擇是使用公用表表達式:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM