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

如何计算数据库中starting与ending字段的时间间隔?已试whereBetween无效

嘿,我懂你为啥用whereBetween没效果了——这个方法本来就不是用来计算两个字段时间差的,它是用来筛选单个字段的值落在某个区间内的(比如找starting在09:00到12:00之间的记录),完全不是一回事儿~

咱们来搞定两个时间字段的间隔计算,分两种场景说:

1. 直接写原生SQL的情况

不同数据库的时间差函数不一样,给你列两个常用的:

  • MySQL/MariaDB:用TIMESTAMPDIFF()可以直接算出指定单位的差值,比如要算分钟差:
SELECT 
  *,
  TIMESTAMPDIFF(MINUTE, starting, ending) AS interval_minutes
FROM your_table;

把MINUTE换成HOUR就是小时差,换成SECOND就是秒差;要是想要02:15这种时间格式的差值,用TIMEDIFF(ending, starting)就行。

  • PostgreSQL:可以把时间转成秒数再计算,比如分钟差:
SELECT 
  *,
  EXTRACT(EPOCH FROM (ending::TIME - starting::TIME)) / 60 AS interval_minutes
FROM your_table;

2. 用Laravel Eloquent的情况(毕竟你提到了whereBetween,大概率是Laravel)

直接用selectRaw()把SQL函数嵌进去就能拿到差值:

$results = YourModel::selectRaw('*, TIMESTAMPDIFF(MINUTE, starting, ending) AS interval_minutes')
    ->get();

这样每条结果里都会多一个interval_minutes字段,就是两个时间的分钟差。

如果是要筛选时间间隔符合条件的记录(比如找间隔超过30分钟的),就用whereRaw():

$longIntervals = YourModel::whereRaw('TIMESTAMPDIFF(MINUTE, starting, ending) > 30')
    ->get();

最后提个小提醒:如果你的starting和ending是字符串类型(不是数据库的TIME类型),最好先转成时间格式再计算,比如MySQL里用STR_TO_DATE(starting, '%H:%i')转成时间类型,避免出现计算错误~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:06:58