按日期分割开始日期和结束日期

时间:2018-07-12 18:58:27

标签: sql amazon-redshift

我是sql的初学者。我想按以下方式拆分日期字段。 请帮帮我。

输入:

Id  Start_date  End_date
1   12/7/2018 22:00:34  13/7/2018 1:24:22

输出:

Id     Start_date   End_date
1   12/7/2018 22:00:34  12/7/2018 23:59:59
1   13/7/2018 00:00:00  13/7/2018 1:24:22

2 个答案:

答案 0 :(得分:0)

您可以只使用UNION,因为您知道每个输入记录都会有两条记录。然后,随便带上您的时间戳即可获得此输出:

CREATE TABLE testtable (id int, start_date timestamp(0), end_date timestamp(0));

INSERT INTO testtable VALUES (1, '2018-07-12 22:00:34'::TIMESTAMP, '2018-07-13 01:24:22'::TIMESTAMP);

SELECT * FROM testtable;

 id |     start_date      |      end_date
----+---------------------+---------------------
  1 | 2018-07-12 22:00:34 | 2018-07-13 01:24:22

SELECT id, start_date, (start_date::date + 1) - INTERVAL '1' SECOND AS end_date FROM testtable
UNION ALL
SELECT id, end_date::date, end_date FROM testtable;

 id |     start_date      |      end_date
----+---------------------+---------------------
  1 | 2018-07-12 22:00:34 | 2018-07-12 23:59:59
  1 | 2018-07-13 00:00:00 | 2018-07-13 01:24:22

如果需要两个以上的记录,则会分解。我现在怀疑我已通读此书,您可能有几天的时间间隔,在这种情况下,您可能希望在该时间间隔内的每个完整日期都00:00:0023:59:59 ...?< / p>

答案 1 :(得分:0)

感谢您的更新。但是,当开始日期和结束日期位于同一日期时,上述内容可能会给我们带来虚假数据。我已在

下给出了Scenerio

输入:

1 7/12/2018 15:52:00 7/12/2018 17:57:46
2 7/11/2018 7:00:16 7/12/2018 15:51:54
3 7/12/2018 17:58:10 7/12/2018 18:01:15

输出:

2 7/11/2018 7:00:16 7/11/2018 23:59:59
2 7/12/2018 0:00:00 7/12/2018 15:51:54
3 7/12/2018 17:58:10 7/12/2018 23:59:59
3 7/12/2018 0:00:00 7/12/2018 19:49:55
1 7/12/2018 15:52:00 7/12/2018 23:59:59
1 7/12/2018 0:00:00 7/12/2018 17:57:46