例子
123\.456.578.910.ABC
123\.456.578.910
預期結果
123\.456.578
123\.456.578
對于這兩個輸入,我應該只得到前 3 個
我嘗試了正則運算式和子字串以及 instr 但我沒有得到結果
uj5u.com熱心網友回復:
我們可以REGEXP_SUBSTR在這里使用捕獲組:
SELECT REGEXP_SUBSTR(col, '^(\d (\.\d )*)', 1, 1, NULL, 1)
FROM yourTable;
演示
uj5u.com熱心網友回復:
傳統的 , substr instr組合是另一種選擇:
樣本資料:
SQL> with test (col) as
2 (select '123\.456.578.910.ABC' from dual union all
3 select '123\.456.578.910' from dual
4 )
查詢從這里開始:
5 select col,
6 substr(col, 1, instr(col, '.', 1, 3) - 1) result
7 from test;
COL RESULT
-------------------- --------------------
123\.456.578.910.ABC 123\.456.578
123\.456.578.910 123\.456.578
SQL>
uj5u.com熱心網友回復:
如果您的值始終至少有 3 個.字符,那么您可以使用:
SELECT value,
SUBSTR(value, 1, INSTR(value, '.', 1, 3) - 1) AS expected
FROM table_name;
如果它可能更少,并且在這些情況下您想要整個字串,那么:
SELECT value,
CASE INSTR(value, '.', 1, 3)
WHEN 0
THEN value
ELSE SUBSTR(value, 1, INSTR(value, '.', 1, 3) - 1)
END AS expected
FROM table_name;
其中,對于您的示例資料:
CREATE TABLE table_name (value) AS
SELECT '123\.456.578.910.ABC' FROM DUAL UNION ALL
SELECT '123\.456.578.910' FROM DUAL;
兩個輸出:
價值 預期的 123.456.578.910.ABC 123.456.578 123.456.578.910 123.456.578
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455857.html
上一篇:如何在with塊中定義型別?
