将 INT INTO DATE 转换为 AGE

Convert INT INTO DATE to calculate AGE

我在 PostgreSQL 上查询有问题。我有一个学校的案例,我需要计算一个人在 2005 年 9 月 1 日注册学校时的年龄。在一个文件中,我有他们的出生日期,只有学校注册的年份。

注册年份是 int 类型 ('2005'),但我需要将其转换为 01-09-2005 (DD-MM-YYYY),这是学年的开始。我该怎么做?

我有一个答案,但我不应该这样做 :

SELECT AGE('01/09/2005', auditeur.date_nais)
FROM auditeur
JOIN inscription ON auditeur.id_auditeur = inscription.id_auditeur

我想要的是用 annee ('2005') 替换 '01/09/2005',这是一个 int 类型。

这就是您从 integer:

中获得所需 date 的方法
(2005 || '-09-01')::date

串联力将 2005 转换为 text。使用 ISO 8601 格式 YYYY-MM-DD。然后转换为 date 不依赖于当前的 datestyle 设置。

SELECT age((i.annee || '-09-01')::date, a.date_nais) AS age_at_registration
FROM   auditeur a
JOIN   inscription i USING (id_auditeur)
WHERE  a.id = 123; -- select person somehow

相关:

  • How to concatenate columns in a Postgres SELECT?
  • Selecting records between two timestamps

不需要生成字符串然后转换为日期。您有 3 个整数:来自 table 的 annee 和常量值 09 表示月,01 表示日。有了这些,只需使用 make_date 函数,它接受 3 个整数和 returns 一个日期。

select  age( make_date (annee,09,01), auditeur.date_nais)
from auditeur 
join inscription 
  on auditeur.id_auditeur = inscription.id_auditeur