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

如何在SQL中提取'Monday|7:00-17:00'格式的起止时间并计算时长?

在SQL中提取时间区间并计算小时差

针对Monday|7:00-17:00这类格式的文本,核心思路是通过分隔符定位分割点,避开星期字符串长度不一致的问题,步骤如下:

通用逻辑

  1. 先提取|右侧的时间区间部分(如7:00-17:00)
  2. 再用-拆分出开始时间和结束时间
  3. 将时间字符串转为时间类型后,计算两者的小时差

以下是主流SQL方言的具体实现:

MySQL

SELECT 
  your_column,
  TIMESTAMPDIFF(HOUR, 
                STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, '|', -1), '-', 1), '%H:%i'),
                STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, '|', -1), '-', -1), '%H:%i')
               ) AS hour_difference
FROM your_table;
  • SUBSTRING_INDEX(your_column, '|', -1):取出|右侧的全部内容
  • STR_TO_DATE:将时间字符串转为时间类型
  • TIMESTAMPDIFF:直接计算两个时间的小时差

PostgreSQL

SELECT 
  your_column,
  EXTRACT(EPOCH FROM (
    TO_TIMESTAMP(split_part(split_part(your_column, '|', 2), '-', 2), 'HH24:MI') -
    TO_TIMESTAMP(split_part(split_part(your_column, '|', 2), '-', 1), 'HH24:MI')
  )) / 3600 AS hour_difference
FROM your_table;
  • split_part(your_column, '|', 2):提取|后的时间区间
  • TO_TIMESTAMP:转换时间字符串为时间戳
  • 通过计算时间戳差值,转成小时数(1小时=3600秒)

SQL Server

SELECT 
  your_column,
  DATEDIFF(HOUR, 
           CAST(LEFT(time_segment, CHARINDEX('-', time_segment) - 1) AS TIME),
           CAST(RIGHT(time_segment, LEN(time_segment) - CHARINDEX('-', time_segment)) AS TIME)
          ) AS hour_difference
FROM (
  SELECT 
    your_column,
    RIGHT(your_column, LEN(your_column) - CHARINDEX('|', your_column)) AS time_segment
  FROM your_table
) temp;
  • 子查询中用RIGHT和CHARINDEX提取|后的时间区间
  • LEFT/RIGHT结合CHARINDEX拆分开始/结束时间
  • DATEDIFF计算小时差

内容的提问来源于stack exchange,提问作者Den Lim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:05:22