我正在从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;
欢迎所有建议。
答案 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