sql - 出现的子字符串正则表达式
问题描述
我想选择出现在第一个下划线 _ 之后和第二个、第三个或任何数量的下划线 _ 出现在字符串中的字符串的一部分。
例如,我有如下字符串:
75618_LORIK1_2_BABA_ODD_GENERIC
19_GENTRIT3_CC_DD_FF_BROWSERTC
75618_BETIM2
输出应该是:
LORIK1
GENTRIT3
BETIM2
我似乎无法找到某种子字符串的表达式来获得该部分,我尝试使用:
SELECT SUBSTR(COLNAME, 0, INSTR(COLNAME, '_')-1) FROM DUAL;
但它似乎只得到第一次出现“_”之前的部分。
解决方案
这是使用正则表达式执行此操作的一种方法。
with
test_data (str) as (
select '75618_LORIK1_2_BABA_ODD_GENERIC' from dual union all
select '19_GENTRIT3_CC_DD_FF_BROWSERTC' from dual union all
select '75618_BETIM2' from dual union all
select 'NO UNDERLINES HERE' from dual
)
select str, regexp_substr(str, '[^_]*', 1, 3) as second_token
from test_data
;
STR SECOND_TOKEN
------------------------------- -------------------------------
75618_LORIK1_2_BABA_ODD_GENERIC LORIK1
19_GENTRIT3_CC_DD_FF_BROWSERTC GENTRIT3
75618_BETIM2 BETIM2
NO UNDERLINES HERE
推荐阅读
- html - 将文本路径定位为包含圆 SVG 的中心
- android - 如何以编程方式删除android中的默认按钮样式
- c# - 第二个协程不工作 Unity
- javascript - 如何重构这个 RXJS / Angular 代码?
- python - 在 Python 中创建地图图钉标签
- node.js - 如何从一个 docker 容器中获取正在运行的服务列表
- amazon-web-services - 自动部署 AWS API Gateway 阶段
- laravel - 为什么在这种情况下不应该静态调用错误的非静态方法?
- java - 春季启动junit测试 - ClassNotFoundException
- .htaccess - Apache htacces RewriteRule 到路径等于 uri 的文件