SQL提取字符串中,有多于5个|,提取第四个“|”到第五个“|”之间的部分,如果有满足条件的则输出该部分,用casewhen搭配正则表达式写,没有的话输出无规范表达
时间: 2024-12-18 08:34:00 浏览: 7
在SQL中,你可以使用`CASE WHEN`语句结合`REGEXP_SUBSTR`函数以及正则表达式来实现这个需求。假设你有一个字段叫做`input_string`,你需要从它里面找出第4个到第5个`|`之间的内容。如果存在这样的连续`|`,则返回这部分;否则返回"无规范表达"。
以下是一个示例:
```sql
WITH input_data AS (
SELECT 'example|1|2|3||5|6' AS input_string
)
SELECT
CASE
WHEN REGEXP_LIKE(input_string, '(.*?)(\|{5})[^|]*\|') THEN TRIM(REGEXP_SUBSTR(input_string, '(.*?)(\|{5})[^|]*\|', 1, 2)) -- 正则匹配第四个"|"到第五个"|"之间的内容
ELSE '无规范表达'
END AS result
FROM
input_data;
```
这里,正则表达式`(.*?)(\|{5})[^|]*\|`的工作原理是:
1. `.*?`: 非贪婪匹配任意字符直到找到第一个`|`
2. `\|{5}`: 确保匹配连续五个`|`
3. `[^|]*`: 匹配零个或多个非`|`字符
4. `\|`: 匹配最后一个`|`
注意,实际应用中,你需要根据你的数据库系统调整`REGEXP_LIKE`和`REGEXP_SUBSTR`的语法,因为不是所有数据库都支持相同的正则函数。
阅读全文