首页 > 解决方案 > 函数提供输入位于之间的间隔 id

问题描述

我想创建一个函数,该函数将接收日期作为输入,并能够返回它所在的相应间隔的 id。

例如这里的表:

  id |   start    |    end   
  -- +------------+------------

  1  | 2000-11-30 | 2001-02-19

  2  | 2001-02-21 | 2001-06-04

  3  | 2001-06-05 | 2001-07-13

  4  | 2001-07-15 | 2001-11-29

如果我输入日期“2001-04-17”,我希望它返回 2 的 id 值。

我目前正在尝试这个,但无法让它工作:

create or replace function getId(_date date) returns integer
as $$
declare
    myId integer;
begin
    set myId = (select id from myTable 
        where ((_date >= start) and (_date <= end)));

    return myId;
end;
$$ language plpgsql
;

标签: postgresqlpsql

解决方案


id不用设置就可以直接返回myId。Andend是 PostgreSQL 关键字,所以你应该在双引号内使用它""

create or replace function getId(_date date) returns integer
as $$
begin
    return (select id from myTable 
        where ((_date >= start) and (_date <= "end")));
end;
$$ language plpgsql
;

调用函数:

select getId('2001-04-17');

Output: 2

推荐阅读