我正在處理一個字串,我試圖在出現任何子字串“1:”之前獲取一個字串,直到出現 3 次字符“<”和 3 次出現字符“>”。
以下是字串:
<Affected Items.Lifecycle Phase>WAS<Items.Active>IS<Items.Obsolete>1:<対象アイテム.ライフサイクル フェーズ> は <アイテム.Active> から <アイテム.破棄> に変更されました。2:<受影響的項目.生命週期階段>原為<物料.Active>現為<物料.報廢>3:<Données techniques affectées.Phase de cycle de vie>éTAIT<Données techniques.Active>EST<Données techniques.Obsolète>4:<受影響的物件.生命周期階段>原為<物件.Active>現為<物件.報廢>5:<Betroffene Artikel.Lebenszyklusphase>WAR<Artikel.Active>IST<Artikel.Veraltet>6:<?? ?? ??.?? ?? ??>??:<??.Active>??:<??.??>7:<Задействованные элементы.Фаза жизненного цикла>ЯВЛЯЛСЯ<Элементы.Active>ЯВЛЯЕТСЯ<Элементы.Устарело>; <Affected Items.New Rev>WAS<>IS<1>1:<対象アイテム.新規リビジョン> は <> から <1> に変更されました。2:<受影響的項目.新版本>原為<>現為<1>3:<Données techniques affectées.Nouvelle révision>éTAIT<>EST<1>4:<受影響的物件.新版本>原為<>現為<1>5:<Betroffene Artikel.Neue Revision>WAR<>IST<1>6:<?? ?? ??.? ?? ??>??:<>??:<1>7:<Задействованные элементы.Новая ред.>ЯВЛЯЛСЯ<>ЯВЛЯЕТСЯ<1>
我想要以下子字串:
<Affected Items.Lifecycle Phase>WAS<Items.Active>IS<Items.Obsolete>
和
<Affected Items.New Rev>WAS<>IS<1>
我可以使用下面的 SQL 獲取第一個子字串。但是很難拿到第二個。
WITH CTE AS
(
SELECT '<Affected Items.Lifecycle Phase>WAS<Items.Active>IS<Items.Obsolete>1:<対象アイテム.ライフサイクル フェーズ> は <アイテム.Active> から <アイテム.破棄> に変更されました。2:<受影響的項目.生命週期階段>原為<物料.Active>現為<物料.報廢>3:<Données techniques affectées.Phase de cycle de vie>éTAIT<Données techniques.Active>EST<Données techniques.Obsolète>4:<受影響的物件.生命周期階段>原為<物件.Active>現為<物件.報廢>5:<Betroffene Artikel.Lebenszyklusphase>WAR<Artikel.Active>IST<Artikel.Veraltet>6:<?? ?? ??.?? ?? ??>??:<??.Active>??:<??.??>7:<Задействованные элементы.Фаза жизненного цикла>ЯВЛЯЛСЯ<Элементы.Active>ЯВЛЯЕТСЯ<Элементы.Устарело>; <Affected Items.New Rev>WAS<>IS<1>1:<対象アイテム.新規リビジョン> は <> から <1> に変更されました。2:<受影響的項目.新版本>原為<>現為<1>3:<Données techniques affectées.Nouvelle révision>éTAIT<>EST<1>4:<受影響的物件.新版本>原為<>現為<1>5:<Betroffene Artikel.Neue Revision>WAR<>IST<1>6:<?? ?? ??.? ?? ??>??:<>??:<1>7:<Задействованные элементы.Новая ред.>ЯВЛЯЛСЯ<>ЯВЛЯЕТСЯ<1>'
AS "DETAILS"
FROM DUAL
)
select "DETAILS",
CASE
WHEN "DETAILS" != CONVERT ("DETAILS", 'US7ASCII')
THEN
CASE WHEN "DETAILS" LIKE '%1:%'
THEN
SUBSTR("DETAILS", 0, INSTR("DETAILS", '1:')-1)
ELSE
REGEXP_REPLACE ("DETAILS", '[^ -~]', '')
END
else
"DETAILS" end as details
FROM CTE
任何援助將不勝感激!
uj5u.com熱心網友回復:
本文:
因此,如果您<Affected Items. 將其視為分隔符(而不是,)并生成行,則每行將包含有用的資訊,直到其第一個:. 最后,您需要在結果中添加分隔符。
uj5u.com熱心網友回復:
您可以使用:
WITH split (details, match, end_pos) AS (
SELECT details,
REGEXP_SUBSTR(details, '(.*?)\d :', 1, 1, NULL, 1),
REGEXP_INSTR(details, '(.*?)\d :', 1, 1, 1)
FROM table_name
UNION ALL
SELECT details,
REGEXP_SUBSTR(details, '(.*?)\d :', end_pos, 1, NULL, 1),
REGEXP_INSTR(details, '(.*?)\d :', end_pos, 1, 1)
FROM split
WHERE end_pos > 0
),
brackets (match, opening, closing) AS (
SELECT match,
INSTR(match, '<', -1, 3),
INSTR(match, '>', -1, 3)
FROM split
WHERE end_pos > 0
),
last_3_brackets (match) AS (
SELECT SUBSTR(match, LEAST(opening, closing)) AS match
FROM brackets
WHERE opening > 0
AND closing > 0
)
SELECT *
FROM last_3_brackets
WHERE match = CONVERT (match, 'US7ASCII')
其中,對于樣本資料:
CREATE TABLE table_name (details) AS
SELECT '<Affected Items.Lifecycle Phase>WAS<Items.Active>IS<Items.Obsolete>1:<対象アイテム.ライフサイクル フェーズ> は <アイテム.Active> から <アイテム.破棄> に変更されました。2:<受影響的項目.生命週期階段>原為<物料.Active>現為<物料.報廢>3:<Données techniques affectées.Phase de cycle de vie>éTAIT<Données techniques.Active>EST<Données techniques.Obsolète>4:<受影響的物件.生命周期階段>原為<物件.Active>現為<物件.報廢>5:<Betroffene Artikel.Lebenszyklusphase>WAR<Artikel.Active>IST<Artikel.Veraltet>6:<?? ?? ??.?? ?? ??>??:<??.Active>??:<??.??>7:<Задействованные элементы.Фаза жизненного цикла>ЯВЛЯЛСЯ<Элементы.Active>ЯВЛЯЕТСЯ<Элементы.Устарело>; <Affected Items.New Rev>WAS<>IS<1>1:<対象アイテム.新規リビジョン> は <> から <1> に変更されました。2:<受影響的項目.新版本>原為<>現為<1>3:<Données techniques affectées.Nouvelle révision>éTAIT<>EST<1>4:<受影響的物件.新版本>原為<>現為<1>5:<Betroffene Artikel.Neue Revision>WAR<>IST<1>6:<?? ?? ??.? ?? ??>??:<>??:<1>7:<Задействованные элементы.Новая ред.>ЯВЛЯЛСЯ<>ЯВЛЯЕТСЯ<1>' FROM DUAL;
輸出:
匹配 <Affected Items.Lifecycle Phase>WAS<Items.Active>IS<Items.Obsolete> <Betroffene Artikel.Lebenszyklusphase>WAR<Artikel.Active>IST<Artikel.Veraltet> <受影響的專案。新版本>WAS<>IS<1> <Betroffene Artikel.Neue 修訂版>WAR<>IST<1>
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448739.html
上一篇:SQL從列名中至少有2個元音的用戶獲取所有列,并且其長度優于ORACLEDBMS中的8個
下一篇:SQL注入攻擊模擬無法正常作業
