在 PostgreSQL 中检查闰年与否
Posted
技术标签:
【中文标题】在 PostgreSQL 中检查闰年与否【英文标题】:check leap year or not in PostgreSQL 【发布时间】:2020-09-20 05:41:24 【问题描述】:如何在 PostgreSQL 中检查给定的年份是否是闰年?
我尝试了以下查询。但它显示错误消息。
select extract(year from hiredate)% 4 = 0 from emp
【问题讨论】:
错误信息是什么? 将extract()
的结果转换为integer
:select extract(year from hiredate) % 4 = 0 from emp;
【参考方案1】:
您必须将提取的年份转换为整数。
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 $1);
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', $1)::int, 3, 1) - '1 day'::interval
) = 29;
end
$$ language plpgsql;
【讨论】:
以上是关于在 PostgreSQL 中检查闰年与否的主要内容,如果未能解决你的问题,请参考以下文章