Sql 查询年龄计算和日期比较不一致
我正在做一些计数来验证表XXX,我设计了两个查询来计算18岁以下的人 我使用的查询如下所示:Sql 查询年龄计算和日期比较不一致,sql,postgresql,date,Sql,Postgresql,Date,我正在做一些计数来验证表XXX,我设计了两个查询来计算18岁以下的人 我使用的查询如下所示: 从用户中选择计数(distinct user.id) 左连接sometable上的sometable.id=user.someTableId 左键连接sometable上的另一个表。另一个表id=另一个表id 其中(sometable.id='x'或user.public=true) 和(DATE_PART('year',age(current_DATE,user.birthdate))>=0和DATE
从用户中选择计数(distinct user.id)
左连接sometable上的sometable.id=user.someTableId
左键连接sometable上的另一个表。另一个表id=另一个表id
其中(sometable.id='x'或user.public=true)
和(DATE_PART('year',age(current_DATE,user.birthdate))>=0和DATE_PART('year',age(current_DATE,user.birthdate))在您的第一次查询中,您包括了所有尚未满19岁的人
在第二个查询中,您排除了一群在2002-08-26之前出生的18岁女孩。例如,2002-04-12出生的女孩仍然是18岁。她要到2021-04-12才会满19岁
在postgres中编写最简单的方法是这样,它提供与第一次查询相同的结果:
where extract(year from age(now(), birthdate)) <= 18
IMHO两个条件都应该返回相同的结果,实际的差异是什么?一些备注:年龄(user.birthdate)
,不需要当前日期,当前日期-间隔“18”年
而不是硬编码的“2002-08-26”和标准SQL提取(从年龄开始的年份(user.birthdate))
而不是日期部分或仅:其中摘录(从年龄开始的年份(出生日期))
where (birth_date between '2001-08-27' and current_date)