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

如何将文本类型时间字段转换为date/time格式以计算间隔时长

解决方案

以下针对不同主流数据库环境给出可直接使用的转换及计算方案:

MySQL 环境

  • 用STR_TO_DATE()函数将HH:MM格式的文本转为时间类型,再通过TIMESTAMPDIFF()计算时间间隔,示例为计算分钟间隔:
SELECT 
  start,
  end,
  TIMESTAMPDIFF(MINUTE, STR_TO_DATE(start, '%H:%i'), STR_TO_DATE(end, '%H:%i')) AS duration_minutes
FROM dbo_table;
  • 如需以小时为单位,将分钟结果除以60即可:
SELECT TIMESTAMPDIFF(MINUTE, STR_TO_DATE(start, '%H:%i'), STR_TO_DATE(end, '%H:%i'))/60 AS duration_hours FROM dbo_table;

SQL Server 环境

  • 直接用CAST()/CONVERT()转成TIME类型,再用DATEDIFF()计算间隔,注意end是SQL Server保留关键字,作为字段名需要加方括号转义:
SELECT
  start,
  [end],
  DATEDIFF(MINUTE, CAST(start AS TIME), CAST([end] AS TIME)) AS duration_minutes
FROM dbo_table;

PostgreSQL 环境

  • 用::time语法完成文本到时间类型的转换,通过时间差计算结果:
SELECT
  start,
  end,
  EXTRACT(EPOCH FROM (end::time - start::time))/60 AS duration_minutes
FROM dbo_table;

跨天场景修正

如果存在跨天排班(比如start为22:00,end为次日06:00),上述计算会得到负数,可通过判断逻辑修正,以SQL Server为例:

SELECT
  CASE WHEN DATEDIFF(MINUTE, CAST(start AS TIME), CAST([end] AS TIME)) >=0 
       THEN DATEDIFF(MINUTE, CAST(start AS TIME), CAST([end] AS TIME))
       ELSE DATEDIFF(MINUTE, CAST(start AS TIME), CAST([end] AS TIME)) + 1440 END AS duration_minutes
FROM dbo_table

其中1440为一天的总分钟数,其他数据库可参照该逻辑做对应调整。

内容的提问来源于stack exchange,提问作者Jethro H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:00