【问题标题】:Get the last timestamp of a month获取一个月的最后一个时间戳
【发布时间】:2021-06-12 11:49:38
【问题描述】:

DB-Fiddle

CREATE TABLE PaL (
    id SERIAL PRIMARY KEY,
    event_date DATE
);

INSERT INTO PaL
(event_date)
VALUES 

('2020-01-01'),
('2020-02-05'),
('2020-03-20'),
('2020-04-15'),
('2020-05-11'),
('2020-06-18'),
('2020-07-19'),
('2020-12-31');

预期结果:

event_date            |   last_timestamp_of_the_month        |
----------------------|---------------------------------- ---|-----------
2020-01-02            |       2020-01-31 23:59:59            |    
2020-02-05            |       2020-02-29 23:59:59            |   
2020-03-20            |       2020-03-31 23:59:59            |    
2020-04-15            |       2020-04-30 23:59:59            |
2020-05-11            |       2020-05-31 23:59:59            |    
2020-06-18            |       2020-06-30 23:59:59            |  
2020-07-19            |       2020-07-31 23:59:59            | 
2021-12-31            |       2020-12-31 23:59:59            | 

在结果中我想得到 event_date 每个月的最后一个时间戳。
因此,我尝试使用此查询:

SELECT 
DATEADD(day, -1, DATEADD(month, +1, date_trunc('month', pl.event_date)))::timestamp AS last_timestamp_of_the_month
FROM PaL pl

查询已经给了我这个月的最后一天。
但是,它分配给它的不是23:59:59,而是00:00:00

如何更改查询以使每个日期后面的23:59:59 与预期结果一样?

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

    由于我无法访问任何 redshift 平台,因此不能肯定地说,但下面的查询应该可以工作。请试试这个。与其减去一天,不如减去一秒。

    SELECT 
    DATEADD(sec, -1, DATEADD(month, +1, date_trunc('month', pl.event_date)))::timestamp AS last_timestamp_of_the_month
    FROM PaL pl
    

    【讨论】:

    • @Michi 请让我知道您的反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多