【问题标题】:How to get end date from start date, start time and finish time in SQL如何在 SQL 中从开始日期、开始时间和结束时间获取结束日期
【发布时间】:2021-09-06 18:11:47
【问题描述】:

我正在尝试在 SQL 中查找事件的结束日期。以下是我拥有的数据示例。

EventDate   EventStartTime    EventEndTime
01/01/2015  14:17             16:50
04/01/2015  19:20             22:00
17/01/2015  22:30             03:35
17/02/2015  22:50             03:35
30/05/2015  23:30             01:50
01/06/2015  11:40             14:50

我想要的输出:

EventDate   EventStartTime  EventEndTime    EventEndDate
01/01/2015  14:17           16:50           01/01/2015
04/01/2015  19:20           22:00           04/01/2015
17/01/2015  22:30           03:35           18/01/2015
17/02/2015  22:50           03:35           18/02/2015
30/05/2015  23:30           01:50           31/05/2015
01/06/2015  11:40           14:50           01/06/2015

如果有人知道如何编写代码,我将不胜感激。

【问题讨论】:

  • 您已要求使用 SQL 解决方案,因此请不要删除 SQL 标记。
  • 你能详细说明你的问题吗?
  • 如果您无法解释如何确定EventEndDate,那么您或我们将很难在代码中实现逻辑。请解释您正在使用的算法。请阅读this 以获取有关改进问题的一些提示。我们不想浪费时间假设所有列都是NVarChar(666),而它们可能是更合适的数据类型。

标签: sql sql-server tsql datetime


【解决方案1】:

只有我能从你的问题中弄清楚,如果END DATE 低于START DAY,那就是第二天。所以我的查询是:

SELECT 
    EventDate,
    EventStartTime,
    EventEndTime,
    CASE 
        WHEN EventEndTime < EventStartTime THEN DATEADD(DAY, 1, EventDate) ELSE EventDate
    END AS EventEndDate
FROM 
    Events

【讨论】:

    【解决方案2】:
    select EventDate ,EventStartTime,EventEndTime
    ,(
    case when cast(EventStartTime as date)> cast(EventEndTime as date) 
    then cast(cast(EventDate  as datetime) +1 as date)
    else cast(EventDate  as date)
    end
    ) EventEndDate
    from TableName
    

    如果我理解你,试试这个。

    【讨论】:

      【解决方案3】:

      您可以通过case when 表达式轻松实现。如果 EventEndDate 小于 EventStartDate 则在 EventDate 中添加一天,如果 EventEndDate 大于 EventStartDate 则选择 EventDate 作为 EventStartDate(根据您的输出)。

      架构和插入语句:

       create table events(EventDate date,   EventStartTime time,    EventEndTime time);
       insert into events values('2015-01-01',  '14:17',             '16:50');
       insert into events values('2015-01-04',  '19:20',             '22:00');
       insert into events values('2015-01-17',  '22:30',             '03:35');
       insert into events values('2015-02-17',  '22:50',             '03:35');
       insert into events values('2015-05-30',  '23:30',             '01:50');
       insert into events values('2015-06-01',  '11:40',             '14:50');
      

      查询:

       select EventDate,EventStartTime,EventEndTime, 
       (case when EventEndTime>=EventStartTime then EventDate else dateadd(day,1,EventDate) end)EventStartDate
       from events
      

      输出:

      EventDate EventStartTime EventEndTime EventEndDate
      2015-01-01 14:17:00.0000000 16:50:00.0000000 2015-01-01
      2015-01-04 19:20:00.0000000 22:00:00.0000000 2015-01-04
      2015-01-17 22:30:00.0000000 03:35:00.0000000 2015-01-18
      2015-02-17 22:50:00.0000000 03:35:00.0000000 2015-02-18
      2015-05-30 23:30:00.0000000 01:50:00.0000000 2015-05-31
      2015-06-01 11:40:00.0000000 14:50:00.0000000 2015-06-01

      db小提琴here

      【讨论】:

        猜你喜欢
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多