当我减去时间戳时,间隔的形式为DD:HH:MM:SS.如何在不提取日期和小时以及乘法/加法的情况下将其全部转换为分钟?我正在寻找一个我可以date_part在此查询中替换的单个函数,以便它返回65:
select date_part('minutes', '65 minutes'::interval);
Run Code Online (Sandbox Code Playgroud)
上下文:我需要知道自给定时间戳以来已经过了多少分钟.
Mil*_*dev 52
SELECT EXTRACT(EPOCH FROM '2 months 3 days 12 hours 65 minutes'::INTERVAL)/60;
Run Code Online (Sandbox Code Playgroud)
似乎工作.
警告:"似乎"是关键词.
正如前面的答案所指出的,技巧是将间隔转换为“纪元”,即绝对秒数,然后适当除以其他单位的绝对数。
几年前,我编写了一个interval_convert函数,将其推广到 接受的大多数参数date_part,假设一个月是 30 天,一年是 365.25 天。
请随意使用和修改您认为合适的:
CREATE FUNCTION
interval_convert(in_unit text, in_interval interval)
RETURNS double precision
AS $FUNC$
SELECT
EXTRACT(
EPOCH FROM
$2 -- in_interval
)
/
-- Slightly lazy way of allowing both singular and plural
-- has side effect that 'centurie' and 'centurys' are accepted
-- but otherwise behaves similarly to DATE_TRUNC
CASE TRIM(TRAILING 's' FROM LOWER(
$1 -- in_unit
))
WHEN 'microsecond' THEN 0.000001
WHEN 'millisecond' THEN 0.001
WHEN 'second' THEN 1
WHEN 'minute' THEN 60
WHEN 'hour' THEN 3600
WHEN 'day' THEN 86400
WHEN 'week' THEN 604800
WHEN 'month' THEN 2592000 -- 30 days
-- WHEN 'quarter' THEN -- Not supported
WHEN 'year' THEN 31557600 -- 365.35 days
WHEN 'decade' THEN 315576000
WHEN 'century' THEN 3155760000
WHEN 'centurie' THEN 3155760000
WHEN 'millennium' THEN 31557600000
WHEN 'millennia' THEN 31557600000
END
$FUNC$
LANGUAGE sql
IMMUTABLE
RETURNS NULL ON NULL INPUT;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36853 次 |
| 最近记录: |