","处或附近的语法错误

Syntax error at or near ","

我在使用此功能时遇到问题,不知道如何解决。

Create Function Quy(sdate timestamp)
returns integer as $$
declare
        numbmonth integer;
        quy integer;
Begin
    numbmonth := Date_part('month',sdate);
    If numbmonth < 4 then
        quy := 1;
    else if numbmonth < 7 then
        quy := 2;
    else if numbmonth < 10 then
        quy := 3;
    else quy := 4;
    return quy;
END;
$$
LANGUAGE plpgsql;

当我尝试 运行 代码时会发生这种情况:

ERROR:  syntax error at or near ";"
LINE 16: END;

我真的不明白这是怎么回事。

多个语法错误。该函数将像这样工作:

CREATE OR REPLACE FUNCTION quy(sdate timestamp)
  RETURNS integer AS
$func$
DECLARE
   numbmonth integer := date_part('month', sdate);
   quy integer;
BEGIN
   IF numbmonth < 4 THEN
      quy := 1;
   ELSIF numbmonth < 7 THEN
      quy := 2;
   ELSIF numbmonth < 10 THEN
      quy := 3;
   ELSE
      quy := 4;
   END IF;
   RETURN quy;
END
$func$  LANGUAGE plpgsql;

Consult the manual for the basic syntax of IF.

但那是无稽之谈。要获得 季度 ,请在简单表达式中使用字段说明符 QUARTERdate_part() or EXTRACT()

EXTRACT(QUARTER FROM $timestamp)

EXTRACT 是 SQL 等同于 date_part().
的标准 returns double precision,因此如果需要,请转换为 integer (::int)。

如果您还需要一个功能:

CREATE OR REPLACE FUNCTION quy(sdate timestamp)
  RETURNS int LANGUAGE sql IMMUTABLE AS
'SELECT EXTRACT(QUARTER FROM )::int';

</code> 是对第一个函数参数的引用。相当于示例中的 <code>sdate$-表示法适用于任何版本的 Postgres,而 SQL 函数中的命名参数引用仅在 Postgres 9.2 中引入。参见:

  • PLPGSQL Function to Calculate Bearing

dbfiddle here