【问题标题】:How to get user details between two ages from dob without age column mysql如何从没有年龄列mysql的dob获取两个年龄之间的用户详细信息
【发布时间】:2018-04-29 04:53:45
【问题描述】:

我想获取从出生日期起两个年龄之间的用户的详细信息。我的条件是,

  1. 根据出生日期计算年龄
  2. 查找两个年龄之间的用户详细信息

我的桌子是,

id    username    phone    dob
-------------------------------------
1     Jithin     123456    31/12/1990
2     Binoy      235612    12/12/1991
3     Jibin      353453    12/12/1996

我已经创建了如下的mysql查询

SELECT username, DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age FROM tbl_user WHERE age BETWEEN 20 AND 30

但上面的代码显示错误the column age not found。如何解决这个问题。从dob 找到age 并进行比较的任何替代方法。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    它不起作用,因为您不能立即使用别名。围绕它使用子查询或重复计算。有一种更短的计算方法:

    SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age
    from tbl_user 
    where TIMESTAMPDIFF(YEAR, dob, CURDATE()) between 20 and 30
    

    【讨论】:

      【解决方案2】:

      你可以使用subquery:

      SELECT *
      FROM (SELECT  username,
              DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') - 
              (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age 
          FROM tbl_user) sub
      WHERE sub.age BETWEEN 20 AND 30;
      

      来自SELECT 子句的列age 在同一级别的WHERE 中不可见。您可以使用子查询包装它或重复整个表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        相关资源
        最近更新 更多