postgresql postgres间隔添加变量current_setting不起作用

e0bqpujr  于 2023-01-17  发布在  PostgreSQL
关注(0)|答案(3)|浏览(132)
set session myconstants.test =  '10';
set session myconstants.testb =  '10 min';
SELECT now()::time - interval concat (current_setting('myconstants.selfName')::varchar,' min');
SELECT now()::time - INTERVAL '10 min';
set session myconstants.test =  '10';
SELECT now()::time - interval current_setting('myconstants.testb')::varchar;
SELECT now()::time - INTERVAL '10 min';

我想在间隔函数中添加变量,但是current_setting不起作用。我怎么解决它呢?我使用postgres

62o28rlo

62o28rlo1#

我找到了这个解operator does not exist: timestamp with time zone + integer in PostgreSql

create function addit(timestamptz,int) returns timestamptz immutable language sql as $$
    select $1+ interval '1 hour'*$2
$$;
create operator + (leftarg =timestamptz, rightarg =int, procedure=addit);

create function minusit(timestamptz,int) returns timestamptz immutable language sql as $$
    select $1+ interval '-1 hour'*$2
$$;
create operator - (leftarg =timestamptz, rightarg =int, procedure=minusit);

创建+和-运算符,然后执行

set session myconstants.testb =  -1;
select start_time ,start_time - current_setting('myconstants.testb')::integer  from besoccer_team bt ;
select start_time ,start_time - current_setting('myconstants.testb')::integer  from besoccer_team bt ;

start_time是时间戳类型

set session myconstants.testb =  -1;
select  now()::timestamp  , now()::timestamp  - current_setting('myconstants.testb')::integer  from besoccer_team bt ;
select  now()::timestamp  , now()::timestamp  - current_setting('myconstants.testb')::integer  from besoccer_team bt ;
gcxthw6b

gcxthw6b2#

您需要将变量值强制转换为一个区间:

SELECT now()::time - current_setting('myconstants.testb')::interval

前缀表示法interval '....'适用于它后面的常量。

p8h8hvxi

p8h8hvxi3#

您也可以尝试make_interval。

SET session myconstants.test = 10;

SELECT
    now() + make_interval(mins => current_setting('myconstants.test')::int);

相关问题