在 PostgreSQL 中检查闰年

check leap year or not in PostgreSQL

如何在 PostgreSQL 中检查给定年份是否为闰年?

我在下面试过 query.But 它显示错误消息。

select extract(year from hiredate)% 4 = 0 from emp

您必须将提取的年份转换为整数。

select extract(year from hiredate)::integer % 4 = 0 from emp

但是,闰年的公式不正确。它是每四年一次除了每100年除了每400年。1900年不是闰年,但2000年是。

create function is_leap_year(timestamp)
returns boolean as $$
declare y integer;
begin
  y := extract(year from );
  return (y % 4 = 0) and (y % 100 <> 0 or y % 400 = 0);
end
$$ language plpgsql;

或者,您可以查看当年的 3 月 1 日之前是哪一天。这更安全,因为它将使用 Postgresql 的内部逻辑。

create function is_leap_year(timestamp)
returns boolean as $$
begin
  return date_part(
    'day',
    make_date(date_part('year', )::int, 3, 1) - '1 day'::interval
  ) = 29;
end
$$ language plpgsql;