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

MySQL关联表中计算datetime差值并转为天小时格式的实现

嘿,我来帮你搞定这个时间差值格式化的需求!要把delivery_date_to和当前时间的差转换成X days X hour的格式,得根据你使用的数据库类型来调整,下面给你主流数据库的具体实现方案:

MySQL/MariaDB 版本

MySQL里可以用TIMESTAMPDIFF函数分别计算天数和剩余小时数,再用CONCAT拼接成你要的格式。直接整合到你的关联查询里:

SELECT 
    marketplace_orders.entity_id as id, 
    sales_order.delivery_date_to as delivery_date_to,
    -- 计算并格式化时间差
    CONCAT(
        TIMESTAMPDIFF(DAY, NOW(), sales_order.delivery_date_to), ' days ',
        TIMESTAMPDIFF(HOUR, NOW(), sales_order.delivery_date_to) % 24, ' hour'
    ) as time_left
FROM marketplace_orders 
INNER JOIN sales_order ON marketplace_orders.order_id = sales_order.entity_id; -- 替换成你实际的关联字段

补充说明:

  • 如果delivery_date_to早于当前时间,结果会出现负数。要是需要显示绝对值(比如过期的时间也显示正数),可以套一层ABS():
CONCAT(
    ABS(TIMESTAMPDIFF(DAY, NOW(), sales_order.delivery_date_to)), ' days ',
    ABS(TIMESTAMPDIFF(HOUR, NOW(), sales_order.delivery_date_to) % 24), ' hour'
) as time_left
  • 如果你需要处理单复数(比如1 day而不是1 days),可以再加IF判断,但看你的示例是统一用复数形式,所以上面的代码就够了。

PostgreSQL 版本

PostgreSQL用AGE()函数计算时间间隔,再用EXTRACT提取天数和小时数:

SELECT 
    marketplace_orders.entity_id as id, 
    sales_order.delivery_date_to as delivery_date_to,
    CONCAT(
        EXTRACT(DAY FROM AGE(sales_order.delivery_date_to, CURRENT_TIMESTAMP)), ' days ',
        EXTRACT(HOUR FROM AGE(sales_order.delivery_date_to, CURRENT_TIMESTAMP)), ' hour'
    ) as time_left
FROM marketplace_orders 
INNER JOIN sales_order ON marketplace_orders.order_id = sales_order.entity_id; -- 替换实际关联字段

同样,要处理过期时间的负数问题,给EXTRACT的结果套ABS()就行。

SQL Server 版本

SQL Server用DATEDIFF函数来计算差值,逻辑和MySQL类似:

SELECT 
    marketplace_orders.entity_id as id, 
    sales_order.delivery_date_to as delivery_date_to,
    CONCAT(
        DATEDIFF(DAY, GETDATE(), sales_order.delivery_date_to), ' days ',
        DATEDIFF(HOUR, GETDATE(), sales_order.delivery_date_to) % 24, ' hour'
    ) as time_left
FROM marketplace_orders 
INNER JOIN sales_order ON marketplace_orders.order_id = sales_order.entity_id; -- 替换实际关联字段

处理负数的话同样用ABS()包裹对应的差值计算部分。

记得把代码里的关联条件(marketplace_orders.order_id = sales_order.entity_id)替换成你实际表之间的关联字段哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:32