我正在嘗試從很長的 URL 中動態提取子字串。例如,我可能有以下 URL:
https://www.google.com/ABCDEF Version=“0.0.00.0” GHIJKhttps://www.google.com/ABCDEFGH Version=“0.0.0.0” IJKLMhttps://www.google.com/ABC Version=“0.0.0.00” 12345
我正在嘗試僅提取版本代碼(0.0.0.0)。
這是我到目前為止所擁有的:
SELECT SUBSTR(col, INSTR(col, ‘Version=“‘) 9)
FROM table
此查詢回傳以下結果:
0.0.00.0” GHIJK … (url continues on)
所以,我嘗試在鏈接中找到“版本”,這樣我就可以從每一行的相同位置開始。這很好用,但是我很難動態定位結尾引號(“)。我嘗試在 SUBSTR 函式的第三個引數中使用 INSTR,如下所示:
SELECT SUBSTR(col, INSTR(col, ‘Version=“‘) 9, INSTR(col, ‘“‘))
FROM table
我認為這會找到結束引號的位置,然后使用該數字作為長度,但它回傳一個奇怪的輸出。我還使用了 POSITION、CHARINDEX、LENGTH 和 LOCATE。這些函式在 Oracle 中都不起作用。
我想也許當我在第一個 INSTR 函式之后加上 9 時,它會將查詢設定為固定位置而不是動態位置,但我不確定如何洗掉'Version =“'。
uj5u.com熱心網友回復:
這是一個選項(實際上,它選擇雙引號之間的內容 - 這是您示例中的版本;如果有其他類似的substring,您會得到錯誤的結果)。
with test (col) as
(select 'https://www.google.com/ABCDEF Version="0.0.00.0" GHIJK' from dual union all
select 'https://www.google.com/ABCDEFGH Version="0.0.0.0" IJKLM' from dual union all
select 'https://www.google.com/ABC Version="0.0.0.00" 12345' from dual
)
select col,
replace(regexp_substr(col, '". "'), '"') version
from test;
這導致
https://www.google.com/ABCDEF Version="0.0.00.0" GHIJK 0.0.00.0
https://www.google.com/ABCDEFGH Version="0.0.0.0" IJKLM 0.0.0.0
https://www.google.com/ABC Version="0.0.0.00" 12345 0.0.0.00
uj5u.com熱心網友回復:
您仍然可以使用 useINSTR定位"字串中的第二個,然后減去第一個的位置"以獲得您需要獲得的長度。下面是一個示例查詢:
SELECT col,
SUBSTR (col, INSTR (col, '"') 1, INSTR (col, '"', 1, 2) - INSTR (col, '"') - 1) version
FROM test;
uj5u.com熱心網友回復:
您可以使用REGEXP_SUBSTR()withVersion=(\d.*\d?)模式來提取 and 之間的部分Version="("您的引號被假定為常規雙引號" ")
SELECT REGEXP_SUBSTR(url,'Version="(\d.*\d)"',1,1,null,1) AS version
FROM t
在哪里
- 第三個引數(1)是位置,第四個引數(1)是發生,使用最后一個作為捕獲組(1)尤為重要
'"(\d.*\d)"'對于當前資料集,確實使用模式就足夠了
要么
REGEXP_REPLACE()捕獲組\2為
SELECT REGEXP_REPLACE(url,'^(.*Version=")([^"]*).*','\2') AS version
FROM t
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448966.html
下一篇:將最新日期添加到資料透視查詢
