在PostgreSQL中检查是否有leap年

问题描述

如何在Postgresql中检查给定年份是否为leap年??

我在下面的查询中尝试过。但是它显示错误消息。

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

解决方法

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

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

但是,that年的公式不正确。除每100个间隔的每400个间隔之外,它是每四年一次。1900年不是a年,而是2000年。

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