Oracle中使用REGEXP_REPLACE移除字符串首个空格的方法
移除第一个空格并转换时间为分钟数的解决方案
一、仅移除第一个空格的正则实现
要只删除字符串中的第一个空格,用REGEXP_REPLACE搭配精准正则即可,核心是匹配并替换第一个出现的空格,保留后续空格不动。
通用正则逻辑
正则模式:^(\S+)\s
替换规则:将匹配内容替换为\1(保留空格前的非空白内容,去掉第一个空格)
各数据库示例
MySQL
SELECT REGEXP_REPLACE(your_column, '^(\\S+)\\s', '$1') AS cleaned_time FROM your_table;
注:MySQL中反斜杠需转义,因此用\\S和\\s
PostgreSQL/BigQuery
SELECT REGEXP_REPLACE(your_column, '^(\\S+)\\s', '\\1') AS cleaned_time FROM your_table;
也可以用非正则方案(PostgreSQL适用):
SELECT CASE WHEN POSITION(' ' IN your_column) > 0 THEN SUBSTRING(your_column FROM 1 FOR POSITION(' ' IN your_column)-1) || SUBSTRING(your_column FROM POSITION(' ' IN your_column)+1) ELSE your_column END AS cleaned_time FROM your_table;
二、转换为分钟数的完整流程
处理完空格后,可分步骤提取小时、分钟数值计算总和:
步骤1:提取小时数并转分钟
从处理后的字符串开头提取数字,乘以60:
-- PostgreSQL示例 SELECT REGEXP_REPLACE(cleaned_time, '[^0-9].*', '')::INT * 60 AS hours_in_minutes FROM ( SELECT REGEXP_REPLACE(your_column, '^(\\S+)\\s', '\\1') AS cleaned_time FROM your_table ) t;
步骤2:提取分钟数(若存在)
提取字符串后半段的分钟数值:
SELECT CASE WHEN cleaned_time LIKE '%min%' THEN REGEXP_REPLACE(SUBSTRING(cleaned_time FROM POSITION(' ' IN cleaned_time)+1), '[^0-9]', '')::INT ELSE 0 END AS minutes FROM ( SELECT REGEXP_REPLACE(your_column, '^(\\S+)\\s', '\\1') AS cleaned_time FROM your_table ) t;
步骤3:合并总分钟数
将两部分相加得到最终结果:
SELECT (REGEXP_REPLACE(cleaned_time, '[^0-9].*', '')::INT * 60) + CASE WHEN cleaned_time LIKE '%min%' THEN REGEXP_REPLACE(SUBSTRING(cleaned_time FROM POSITION(' ' IN cleaned_time)+1), '[^0-9]', '')::INT ELSE 0 END AS total_minutes FROM ( SELECT REGEXP_REPLACE(your_column, '^(\\S+)\\s', '\\1') AS cleaned_time FROM your_table ) t;
内容的提问来源于stack exchange,提问作者Landon Statis
相关产品推荐
相关产品推荐

