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

如何在SQL中通过起始日期、开始时间与结束时间计算事件结束日期

实现思路

核心判断逻辑如下:
比较EventEndTime和EventStartTime的大小:

  • 如果EventEndTime > EventStartTime:说明事件当天结束,EventEndDate等于原EventDate
  • 如果EventEndTime < EventStartTime:说明事件跨天,EventEndDate等于原EventDate加1天

注意需要先把EventDate从DD/MM/YYYY格式的字符串转为对应数据库的日期类型,避免字符串运算出错。如果你的表中字段已经是日期、时间类型,可以直接跳过格式转换步骤。


不同数据库实现示例

MySQL 代码

SELECT 
    EventDate,
    EventStartTime,
    EventEndTime,
    DATE_FORMAT(
        CASE 
            WHEN STR_TO_DATE(EventEndTime, '%H:%i') > STR_TO_DATE(EventStartTime, '%H:%i') 
            THEN STR_TO_DATE(EventDate, '%d/%m/%Y')
            ELSE DATE_ADD(STR_TO_DATE(EventDate, '%d/%m/%Y'), INTERVAL 1 DAY)
        END,
        '%d/%m/%Y'
    ) AS EventEndDate
FROM 你的表名;

PostgreSQL 代码

SELECT 
    EventDate,
    EventStartTime,
    EventEndTime,
    TO_CHAR(
        CASE 
            WHEN EventEndTime::time > EventStartTime::time
            THEN TO_DATE(EventDate, 'DD/MM/YYYY')
            ELSE TO_DATE(EventDate, 'DD/MM/YYYY') + INTERVAL '1 day'
        END,
        'DD/MM/YYYY'
    ) AS EventEndDate
FROM 你的表名;

SQL Server 代码

SELECT 
    EventDate,
    EventStartTime,
    EventEndTime,
    FORMAT(
        CASE 
            WHEN CAST(EventEndTime AS TIME) > CAST(EventStartTime AS TIME)
            THEN CONVERT(DATE, EventDate, 103) -- 103对应DD/MM/YYYY格式编码
            ELSE DATEADD(DAY, 1, CONVERT(DATE, EventDate, 103))
        END,
        'dd/MM/yyyy'
    ) AS EventEndDate
FROM 你的表名;

内容的提问来源于stack exchange,提问作者Jasmine.V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:15:03