首页 > 解决方案 > 如何在 SQL 中从开始日期、开始时间和结束时间获取结束日期

问题描述

我正在尝试在 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

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

标签: sqlsql-servertsqldatetime

解决方案


您可以通过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

输出:

活动日期 事件开始时间 事件结束时间 事件结束日期
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<>在这里摆弄


推荐阅读