所以我有一個字串應該連續包含一次“Object.Name”,如果我看到它,我必須在“=”字符之后獲取值。如果在字串中的任何地方都不匹配,我應該移動硬編碼值。
這是字串的示例:
Object.Name=ASDD||Product.Name=DSA
Product.Name=QWE||Object.Name=WSXS
Storage.Name=12345||Object.Name=WERR||Product.Name=QAZ
我知道我應該為此使用案例,但不知道如何處理字串
case
when (match the string ) then (value after the "=")
else (hardcoded value)
end
uj5u.com熱心網友回復:
在 Oracle 中,您可以使用:
SELECT value,
CASE
WHEN start_pos = 0
THEN NULL
ELSE SUBSTR(
'||' || value || '||',
start_pos LENGTH('||Object.Name='),
end_pos - start_pos - LENGTH('||Object.Name=')
)
END AS object_name
FROM (
SELECT value,
INSTR(
'||' || value || '||',
'||Object.Name='
) AS start_pos,
INSTR(
'||' || value || '||',
'||',
INSTR('||' || value || '||', '||Object.Name=') LENGTH('||Object.Name=')
) AS end_pos
FROM table_name
)
其中,對于樣本資料:
CREATE TABLE table_name (value) AS
SELECT 'Object.Name=ASDD||Product.Name=DSA' FROM DUAL UNION ALL
SELECT 'Product.Name=QWE||Object.Name=WSXS' FROM DUAL UNION ALL
SELECT 'Storage.Name=12345||Object.Name=WERR||Product.Name=QAZ' FROM DUAL;
輸出:
價值 OBJECT_NAME 物件名稱=ASDD||產品名稱=DSA 自閉癥譜系障礙 產品名稱=QWE||物件名稱=WSXS WSXS Storage.Name=12345||Object.Name=WERR||Product.Name=QAZ 錯誤
db<>在這里擺弄
由于您更改了標簽,因此在 MySQL 中:
SELECT value,
CASE
WHEN start_pos = 0
THEN NULL
ELSE SUBSTRING(
CONCAT('||', value, '||'),
start_pos LENGTH('||Object.Name='),
end_pos - start_pos - LENGTH('||Object.Name=')
)
END AS object_name
FROM (
SELECT value,
LOCATE(
'||Object.Name=',
CONCAT('||', value, '||')
) AS start_pos,
LOCATE(
'||',
CONCAT('||', value, '||'),
LOCATE('||Object.Name=', CONCAT('||', value, '||'))
LENGTH('||Object.Name=')
) AS end_pos
FROM table_name
) t
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457441.html
