繁体   English   中英

如何从 Select a substring in Oracle SQL 到一些特定的字符?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM