我创建了一个必须将其参数转换为秒的函数:
CREATE TYPE DiffTimeKoverAndAllInProgressType AS (f2 double precision);
create function ExtractSeconds(interval) returns setof DiffTimeKoverAndAllInProgressType as
'SELECT extract(epoch from interval $$00:10:00$$);' language 'sql';
结果:
$ psql -d test1 -c "select * from ExtractSeconds('00:10:00');"
f2
-----
600
(1 row)
但是如果我想使用参数而不是硬编码的const值:
create function ExtractSeconds(interval) returns setof DiffTimeKoverAndAllInProgressType as
'SELECT extract(epoch from interval $$$1$$);' language 'sql';
结果:
$psql -d test1 -c "select * from ExtractSeconds('00:10:00');"
f2
----
1
(1 row)
问题:我应该怎样做才能获得正常值(例如' 600')并传递一个没有const的参数?
答案 0 :(得分:1)
由于您的输入参数已经是一个间隔,我认为您不需要做任何事情,包括转换 - 我相信您可以按原样获取参数:
create or replace function ExtractSeconds(interval)
returns setof DiffTimeKoverAndAllInProgressType as
$BODY$
SELECT extract(epoch from $1);
$BODY$
language 'sql';
输出:
select * from ExtractSeconds('00:10:00'); -- return 600
select * from ExtractSeconds('00:15:00'); -- return 900
select * from ExtractSeconds('1 week 4 days 2 hours'); -- returns 957600