[英]How to Select a substring in Oracle SQL from and up to some specific characters?
我正在使用 oracle sql。我想從字符 XY0 開始進行 substr,然后再包含 2 或 3 個字符,直到“-”在字符串中簽名
這些字符可能位於字符串中的任何位置。
原版的
列值 |
---|
第一行 - 由於 XY0066 導致的錯誤 - 不適合 - 不適合 |
第二行 - 由於特定的 XY0089 而出錯 - 將不匹配 |
第 3 行 - 狀況不佳 XY0215- 特殊類型錯誤 |
提取應該是
結果 |
---|
XY0066 |
XY0089 |
XY0215 |
我怎樣才能做到這一點?
您可以使用:
SELECT id,
SUBSTR(value, start_pos, end_pos - start_pos) AS code
FROM (
SELECT id,
value,
INSTR(value, 'XY') AS start_pos,
INSTR(value, '-', INSTR(value, 'XY') + 2) AS end_pos
FROM table_name
);
或者
SELECT id,
SUBSTR(
value,
INSTR(value, 'XY'),
INSTR(value, '-', INSTR(value, 'XY') + 2) - INSTR(value, 'XY')
) AS code
FROM table_name;
或使用正則表達式,它輸入起來更短但運行速度會慢得多:
SELECT id,
REGEXP_SUBSTR(value, 'XY[^-]*') AS code
FROM table_name;
其中,對於示例數據:
CREATE TABLE table_name (id, value) AS
SELECT 1, 'Error due to XY0066- Does not fit -Not suitable' FROM DUAL UNION ALL
SELECT 2, 'Error due to specific XY0089- Will not match' FROM DUAL UNION ALL
SELECT 3, 'Not in good cond XY0215- Special type error' FROM DUAL;
所有output:
ID | 代碼 |
---|---|
1個 | XY0066 |
2個 | XY0089 |
3個 | XY0215 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.