[英]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.