【问题标题】:check leap year or not in PostgreSQL在 PostgreSQL 中检查闰年与否
【发布时间】:2020-09-20 05:41:24
【问题描述】:

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

我尝试了以下查询。但它显示错误消息。

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

【问题讨论】:

  • 错误信息是什么?
  • extract()的结果转换为integerselect extract(year from hiredate) % 4 = 0 from emp;

标签: postgresql postgresql-9.4


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 2022-11-14
    • 2021-05-19
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2022-11-01
    • 2022-12-10
    相关资源
    最近更新 更多