我是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
答案 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:00
至23: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