Oracle中从NARRATION字段提取指定规则字符串的SQL查询求助
Oracle提取
DS NO./DS NO后目标字符的SQL实现 针对你需要从NARRATION字段中提取DS NO或DS NO.之后第一个连续字符序列的需求,这里有个可以直接复用的Oracle SQL查询语句:
SELECT NARRATION, REGEXP_SUBSTR( NARRATION, 'DS NO\.?\s*([A-Z0-9]+)', 1, 1, 'i', 1 ) AS DERIVE_NARRATION FROM YOUR_TABLE_NAME;
语句说明:
REGEXP_SUBSTR是Oracle的正则表达式提取函数,各参数作用如下:- 第一个参数:目标字段
NARRATION - 第二个参数(匹配模式):
DS NO\.?\s*([A-Z0-9]+)DS NO:匹配固定文本前缀\.?:匹配可选的点号(兼容DS NO和DS NO.两种格式)\s*:匹配0个或多个空格(处理前缀和目标字符之间可能存在的空格)([A-Z0-9]+):捕获连续的字母/数字序列,也就是我们需要提取的核心内容
1:从字符串第1个字符开始匹配1:提取第1个匹配到的结果'i':忽略大小写(不需要的话可以直接去掉这个参数)1:返回括号内捕获组的内容(即目标字符序列)
- 第一个参数:目标字段
测试结果示例:
| NARRATION | DERIVE_NARRATION |
|---|---|
| BI DS NO 6005527182 | 6005527182 |
| BI DS NO. 485019 | 485019 |
| CI DS NO.6008364862(2000*1) | 6008364862 |
| CI DS NO.1905180207 10*1) EDDF34592845 | 1905180207 |
| CI DS NO.2105180520-(50*1) DDFF39844240 | 2105180520 |
| CI DS NO.2105180653 (2000*1) DFSD39844240 | 2105180653 |
| CI DS NO. 1905180220/(500*3,20 | 1905180220 |
| CI DS NO.2105180166*(200*1) DSFSF39844240 | 2105180166 |
内容的提问来源于stack exchange,提问作者user1463065
相关产品推荐
相关产品推荐

