【发布时间】:2020-08-26 20:47:01
【问题描述】:
我正在做一些计数来验证表 XXX,我设计了 2 个查询来计算 18 岁以下的人。
我使用的查询如下:
select count(distinct user.id) from user
left join sometable on sometable.id = user.someTableId
left join anotherTable on sometable.anotherTableId = anotherTable.id
where (sometable.id = 'x' or user.public = true)
AND (DATE_PART('year', age(current_date, user.birthdate)) >= 0 and DATE_PART('year', age(current_date, user.birthdate)) <= 18);
这个查询给出了 5000 个计数(假结果)
但是这个查询应该做同样的事情:
select count(distinct user.id) from user
left join sometable on sometable.id = user.someTableId
left join anotherTable on sometable.anotherTableId = anotherTable.id
where (sometable.id = 'x' or user.public = true)
and (user.birthdate between '2002-08-26' and current_date)
旁注:日期“2002-08-26”是因为今天是 2020-08-26,所以我从今天的日期减去 18 年。
给我的计数与第一个不同。 (最后一个是正确的,因为和我在另一个nosql数据库中的一样)
我想知道查询的不同之处或计数不同的原因。
提前致谢。
【问题讨论】:
-
恕我直言,这两个条件应该返回相同的结果,实际区别是什么?一些备注:
age(user.birthdate),不需要 current_date,current_date - interval '18' year而不是硬编码的 '2002-08-26' 和标准 SQLextract(year from age(user.birthdate))而不是 DATE_PART
标签: sql postgresql date