从MySQL到Postgres:最后一刻钟

从MySQL到Postgres:最后一刻钟,mysql,postgresql,function,date,migration,Mysql,Postgresql,Function,Date,Migration,我正在从MySQL迁移到Postgres。我需要在Postgres中获取日期时间值和时间戳,并确定最后四分之一小时的值。 我在这两种环境中都有一个解决方案,但我想知道是否有更紧凑或更优雅的Postgres解决方案。 以下是我的MySQL方法: select cast(now() as date) + interval hour(now()) hour + interval (floor(minute(now()) / 15) * 15) minute as last_quarter_hour;

我正在从MySQL迁移到Postgres。我需要在Postgres中获取日期时间值和时间戳,并确定最后四分之一小时的值。 我在这两种环境中都有一个解决方案,但我想知道是否有更紧凑或更优雅的Postgres解决方案。 以下是我的MySQL方法:

select cast(now() as date) + interval hour(now()) hour + interval (floor(minute(now()) / 15) * 15) minute as last_quarter_hour;
select date(current_timestamp) + date_part('hour',cast(current_timestamp as timestamp)) * interval '1 hour' + floor(date_part('minute',cast(current_timestamp as timestamp)) / 15) * 15 * interval '1 minute' as last_quarter_hour;
以下是我的博士后方法:

select cast(now() as date) + interval hour(now()) hour + interval (floor(minute(now()) / 15) * 15) minute as last_quarter_hour;
select date(current_timestamp) + date_part('hour',cast(current_timestamp as timestamp)) * interval '1 hour' + floor(date_part('minute',cast(current_timestamp as timestamp)) / 15) * 15 * interval '1 minute' as last_quarter_hour;

所有的建议都是非常受欢迎的。

所以,代码可能不少,但我认为,这是一个更加直观和可读的解决方案

SELECT CAST(
        SUBSTR( LOCALTIMESTAMP::TEXT, 1, 13 )||':'|| CASE 
        WHEN date_part('minute', LOCALTIMESTAMP)  < 15 THEN '00' 
        WHEN date_part('minute', LOCALTIMESTAMP)  BETWEEN 15 AND 29 THEN '15' 
        WHEN date_part('minute', LOCALTIMESTAMP)  BETWEEN 30 AND 44 THEN '30'
        ELSE '45' END||':00' 
    AS TIMESTAMP)
简单一点:

select
    date_trunc('hour', current_timestamp) +
    date_part('minute', current_timestamp)::int / 15 * interval '15 minute' as last_quarter_hour

的确非常感谢。