【问题标题】:How to select rows by year interval with postgres sql?如何使用 postgresql 按年份间隔选择行?
【发布时间】:2020-01-21 15:33:59
【问题描述】:

我有一张表格,其中包含来自卫生公共系统患者的一些数据。我在这张桌子上有两个日期,疾病通知日期和患者出生日期,像这样:

notification_date | birth_date 
------------------+-----------------
 2013-02-19       | 2013-02-17
 2015-01-28       | 1984-01-22
 2015-02-08       | 1989-10-04
 2015-01-09       | 1984-05-25
 2016-01-28       | 1988-04-26
 2016-01-06       | 1986-05-20

如您所见,通过从这两列中获取年份间隔,我可以了解患者在收到疾病通知时的年龄。我需要查询通知疾病时有多少人的年龄小于 4 岁。

类似的东西:

SELECT COUNT(id) 
FROM notifications 
WHERE age(notification_date, birth_date) < 4 years;

这个查询是否可能需要特定的时间间隔?

【问题讨论】:

    标签: sql postgresql date datetime


    【解决方案1】:

    我会使用直接日期比较:

    select count(*)
    from notifications n
    where notification_date < birthdate  + interval '4 year';
    

    age() 这样的函数的使用似乎不必要地麻烦。

    【讨论】:

      【解决方案2】:

      试试DATE_PARTCount(*)

      SELECT count(*) FROM notifications WHERE DATE_PART('year',age(notification_date, birth_date)) < 4;
      

      此函数将为您提供两个日期之间的年。

      如果您需要,请在此处阅读更多信息: https://www.postgresqltutorial.com/postgresql-date_part/

      【讨论】:

        【解决方案3】:

        Postgres 了解区间算术,因此请考虑:

        SELECT count(*) 
        FROM notifications 
        WHERE age(notification_date, birth_date) < interval '4 years';
        

        Demo on DB Fiddle

        对于您的示例数据,只有一条记录满足条件,因此查询产生1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-03
          • 1970-01-01
          • 2020-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多