日期隐式转换为整数
date is implicitly converting to integer
我在学习PL/pgSQL。我想在一栏中打印接下来 15 天的日期。
所以我创建了以下函数:
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS $$
declare
i date := current_date;
ii date := current_date + integer '15';
BEGIN
loop
return query execute'select ' || (i + interval '1 day')::date;
i = i + 1;
exit when i = ii;
end loop;
END;
$$
LANGUAGE plpgsql;
但是当我 运行 这个函数时我得到这个错误:
ERROR: structure of query does not match function result type
DETAIL: Returned type integer does not match expected type date in column 1.
CONTEXT: PL/pgSQL function p15d() line 8 at RETURN QUERY
您不需要动态 SQL 来向表达式添加间隔。
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS $$
declare
i date := current_date;
ii date := current_date + integer '15';
BEGIN
loop
return query select ( i + interval '1 day' )::date;
i = i + 1;
exit when i = ii;
end loop;
END;
$$
LANGUAGE plpgsql;
但是,不需要这样的功能,Postgres 已经有 generate_series
功能可以满足您的需求。
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS
$$
select generate_series(current_date+1,current_date + 15,interval '1 day' )::date;
$$
LANGUAGE SQL;
您的错误消息的原因是您执行的查询是(今天):
select 2019-03-02
现在2019减3减2就是2014,是一个整数
我在学习PL/pgSQL。我想在一栏中打印接下来 15 天的日期。 所以我创建了以下函数:
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS $$
declare
i date := current_date;
ii date := current_date + integer '15';
BEGIN
loop
return query execute'select ' || (i + interval '1 day')::date;
i = i + 1;
exit when i = ii;
end loop;
END;
$$
LANGUAGE plpgsql;
但是当我 运行 这个函数时我得到这个错误:
ERROR: structure of query does not match function result type
DETAIL: Returned type integer does not match expected type date in column 1.
CONTEXT: PL/pgSQL function p15d() line 8 at RETURN QUERY
您不需要动态 SQL 来向表达式添加间隔。
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS $$
declare
i date := current_date;
ii date := current_date + integer '15';
BEGIN
loop
return query select ( i + interval '1 day' )::date;
i = i + 1;
exit when i = ii;
end loop;
END;
$$
LANGUAGE plpgsql;
但是,不需要这样的功能,Postgres 已经有 generate_series
功能可以满足您的需求。
CREATE or replace FUNCTION p15d()
RETURNS table(date_ date ) AS
$$
select generate_series(current_date+1,current_date + 15,interval '1 day' )::date;
$$
LANGUAGE SQL;
您的错误消息的原因是您执行的查询是(今天):
select 2019-03-02
现在2019减3减2就是2014,是一个整数