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