You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:46:04