PostgreSQL:将函数的参数转换为秒

时间:2016-02-13 12:40:36

标签: sql bash postgresql

我创建了一个必须将其参数转换为秒的函数:

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的参数?

1 个答案:

答案 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