在 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;
如何在 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;