我正在處理包含帶十進制和反斜杠的字串的表資料,如下所示:
info
1/2.2.2
2/1.1.1
3/1.1.11
我需要使用正則運算式來替換如下資料:
info
1/2.2
2/1.1
3/1.1
uj5u.com熱心網友回復:
不要使用(慢)正則運算式,而是使用簡單(更快)的字串函式:
SELECT info,
CASE
WHEN INSTR(info, '.', 1, 2) > 0
THEN SUBSTR(info, 1, INSTR(info, '.', 1, 2) - 1)
ELSE info
END AS part
FROM table_name;
其中,對于樣本資料:
CREATE TABLE table_name (info) AS
SELECT '1/2.2.2' FROM DUAL UNION ALL
SELECT '2/1.1.1' FROM DUAL UNION ALL
SELECT '3/1.1.11' FROM DUAL UNION ALL
SELECT '3/1.1' FROM DUAL;
輸出:
| 資訊 | 部分 |
|---|---|
| 1/2.2.2 | 1/2.2 |
| 2/1.1.1 | 2/1.1 |
| 3/1.1.11 | 3/1.1 |
| 3/1.1 | 3/1.1 |
如果要更新表,則:
UPDATE table_name
SET info = SUBSTR(info, 1, INSTR(info, '.', 1, 2) - 1)
WHERE INSTR(info, '.', 1, 2) > 0
小提琴
uj5u.com熱心網友回復:
為了爭論,這里有一個使用 REGEXP_SUBSTR() 的解決方案。如果未找到模式,則 REGEXP_SUBSTR() 回傳 NULL。感謝 MT0 的 CTE,所以我不必輸入它:-)
WITH table_name(ID, info) AS (
SELECT 1, '1/2.2.2' FROM DUAL UNION ALL
SELECT 2, '2/1.1.1' FROM DUAL UNION ALL
SELECT 3, '3/1.1.11' FROM DUAL UNION ALL
SELECT 4, '3/1.1' FROM DUAL UNION ALL
SELECT 5, '4/4' FROM DUAL)
SELECT ID, REGEXP_SUBSTR(info, '\d/\d\.\d') DATA
from table_name;
ID DATA
---------- --------
1 1/2.2
2 2/1.1
3 3/1.1
4 3/1.1
5
5 rows selected.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522698.html
上一篇:Oracle觸發器排除條件
