sql - 在Oracle中提取子字符串
问题描述
假设我有三行,其值为
1 121/2808B|:6081
2 OD308B|:6081_1:
3 008312100001200|:6081_1
我只想显示价值,直到B
但想排除B
. 正如你在上面的数据中看到的:
- 从
121/2808B|:6081
我只想121/2808B
- 仅从
OD308B|:6081_1:
_OD308B
- 仅从.
008312100001200|:6081_1
_008312100001200
谢谢您的帮助。
解决方案
我想你忘了提到你想|
用作字段分隔符,但我从第三个字符串的预期结果推断出这一点。因此,以下内容应为您提供所需的内容:
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;
推荐阅读
- azure-data-factory-2 - 如何将 LinkedService 名称传递给 ADF 管道中的数据流?
- python - 如何在 Python setup.py 中更改用于构建 C++ 扩展模块的链接器命令?
- java - 处理对 java.lang.Number 子类的操作的通用泛型方法
- python - 如何在 pyomo 目标中调用 scipy odeint 函数?
- angular - 无法增加模态弹出的高度和宽度
- linux - 如何仅使用终端命令(linux)阻止来自我的 WLAN(wifi)的特定 MAC 地址
- flutter - 什么是 MaterialStateProperty
? - android - 如何在 Cloud Firestore 中添加图像并在应用中显示?
- amazon-web-services - 在 Cloudformation 模板中引用动态角色名称
- sorting - 如何在select2中按字母顺序进行选定和未选定排序?