从MySQL到Postgres:上一季度小时

时间:2017-03-01 15:38:19

标签: mysql postgresql function date migration

我正在从MySQL迁移到Postgres。我需要获取DateTime值(显然是Postgres中的时间戳)并确定最后一个季度小时值。 我在这两种环境中都有解决方案,但我想知道Postgres解决方案是否更紧凑或更优雅。 这是我的MySQL方法:

select cast(now() as date) + interval hour(now()) hour + interval (floor(minute(now()) / 15) * 15) minute as last_quarter_hour;

这是我的Postgres方法:

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;

欢迎所有建议。

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

更简单一点:

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