首页 > 解决方案 > 在Oracle中提取子字符串

问题描述

假设我有三行,其值为

1 121/2808B|:6081
2 OD308B|:6081_1:
3 008312100001200|:6081_1

我只想显示价值,直到B但想排除B. 正如你在上面的数据中看到的:

谢谢您的帮助。

标签: sqlstringoraclesubstring

解决方案


我想你忘了提到你想|用作字段分隔符,但我从第三个字符串的预期结果推断出这一点。因此,以下内容应为您提供所需的内容:

WITH cteData AS (SELECT 1 AS ID, '121/2808B|:6081' AS STRING FROM DUAL UNION ALL
                 SELECT 2, 'OD308B|:6081_1:' FROM DUAL UNION ALL
                 SELECT 3, '008312100001200|:6081_1' FROM DUAL)
SELECT ID, STRING, SUBSTR(STRING, 1, CASE
                                       WHEN INSTR(STRING, 'B') = 0 THEN INSTR(STRING, '|')-1
                                       ELSE INSTR(STRING, 'B')-1
                                     END) AS UP_TO_B
  FROM cteData;

dbfiddle在这里


推荐阅读