通过PHP使用postgresql的Age函数

通过PHP使用postgresql的Age函数,php,postgresql,Php,Postgresql,我试图通过年龄范围过滤我的结果。在我的数据库中,有一个表有一列'dob',所以我尝试使用postgreSql的AGE函数从'dob'中获取年龄。但它不起作用。下面是我的代码 contact.php contactController.php 当我在Postgre中尝试上面的sql时,我得到一个错误,年龄不是一个定义的函数。我希望筛选栏中年龄用户选择范围内的所有用户。谢谢你的帮助。TIA尝试立即使用,而不是使用时间戳。此外,如果您只想比较年份,请使用从年龄中提取的年份,这将只显示年份。 假设您的d

我试图通过年龄范围过滤我的结果。在我的数据库中,有一个表有一列'dob',所以我尝试使用postgreSql的AGE函数从'dob'中获取年龄。但它不起作用。下面是我的代码

contact.php

contactController.php

当我在Postgre中尝试上面的sql时,我得到一个错误,年龄不是一个定义的函数。我希望筛选栏中年龄用户选择范围内的所有用户。谢谢你的帮助。TIA

尝试立即使用,而不是使用时间戳。此外,如果您只想比较年份,请使用从年龄中提取的年份,这将只显示年份。 假设您的dob是日期或时间戳类型:

$ageSql = "SELECT id FROM table WHERE EXTRACT(YEAR FROM AGE(now(), dob)) >= 25 AND EXTRACT(YEAR FROM AGE(now(), dob)) <= 40";
$params['queryOptions']['where'][] = "contact_id IN $ageSql"; //use 'IN' in case more than 1 row

如果'dob'是某个varchar或text类型,则按如下方式进行转换-dob::timestamp

age计算两个日期的时间戳之间的差异。您缺少每个的第二个运算符age@LelioFaieta在postgreSql文档中,它说如果我们想将当前日期作为第一个参数,我们可以使用上面的语法。我尝试在db上运行以下查询,从用户中选择id,其中AGEtimestamp dob>=20,AGEtimestamp dob尝试删除dob前面的时间戳。我想dob是约会对象,对吧?如果不投。
<?php
class userController extends AdminController {

    function __construct(){
        parent::__construct("Contact","contacts");
    }

    function index(Array $params = []){

        $ageSql = "";
        if(isset($_GET['from_filter']) && isset($_GET['to_filter'])) {
            $from_age = $_GET['from_filter'];
            $to_age = $_GET['to_filter'];
            $ageSql = "SELECT id FROM user WHERE AGE(timestamp dob) >= $from_age AND AGE(timestamp dob) <= ($to_age)";
            $params['queryOptions']['where'][] = "contact_id = $ageSql";

        }
        parent::index($params);
    }
}
$ageSql = "SELECT id FROM table WHERE EXTRACT(YEAR FROM AGE(now(), dob)) >= 25 AND EXTRACT(YEAR FROM AGE(now(), dob)) <= 40";
$params['queryOptions']['where'][] = "contact_id IN $ageSql"; //use 'IN' in case more than 1 row