Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询年龄计算和日期比较不一致_Sql_Postgresql_Date - Fatal编程技术网

Sql 查询年龄计算和日期比较不一致

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

我正在做一些计数来验证表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_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)