在SQL中如何提取特定字符前后的文本?以提取|后方内容为例
SQL提取竖线后文本的实现方法
核心逻辑为定位竖线|在字符串中的位置,截取该位置之后的全部内容即可得到目标时间区间,以下为不同主流数据库的实现方案,统一假设存储数据的表为schedule,对应字段名为week_time:
MySQL
使用内置函数SUBSTRING_INDEX直接按分隔符截取最后一段,写法最简洁:
SELECT SUBSTRING_INDEX(week_time, '|', -1) AS time_range FROM schedule;
PostgreSQL
使用SPLIT_PART按分隔符取第二部分内容:
SELECT SPLIT_PART(week_time, '|', 2) AS time_range FROM schedule;
SQL Server
先用CHARINDEX定位竖线位置,再用SUBSTRING截取:
SELECT SUBSTRING(week_time, CHARINDEX('|', week_time) + 1, LEN(week_time)) AS time_range FROM schedule;
Oracle
用INSTR定位竖线位置后调用SUBSTR截取:
SELECT SUBSTR(week_time, INSTR(week_time, '|') + 1) AS time_range FROM schedule;
通用SQL标准写法
遵循SQL标准的写法可兼容多数高版本数据库:
SELECT SUBSTRING(week_time, POSITION('|' IN week_time) + 1) AS time_range FROM schedule;
注意事项
如果存在部分数据不含竖线的场景,可以加判断逻辑避免返回异常结果,以MySQL为例:
SELECT IF(LOCATE('|', week_time) > 0, SUBSTRING_INDEX(week_time, '|', -1), week_time) AS time_range FROM schedule;
内容的提问来源于stack exchange,提问作者user16810982
相关产品推荐
相关产品推荐

