mysql - 使用mysql根据年龄过滤成员

标签 mysql sql

我正在尝试检查某个年龄段的人。我有两个组合框,minagecombobox 和 maxagecombobox,值在 1 到 120 之间。

我想获取年龄介于这两个值之间的人(例如,假设我想过滤掉年龄在 18 到 24 之间的人)。

这是成员表结构:

     member_id 
     member_firstname 
     member_dob(datatype is string) (values like 1987-09-08,1976-09-08,.....)

我正在使用 mysql 作为我的数据库.....

**Modified query** 


             SELECT members.member_Id,
                   members.member_Lastname as 'Last Name',
                   members.member_Firstname as 'First Name',
                   members.member_Postcode as 'Post Code',
                   members.member_Reference as Reference,
                   members.member_CardNum as 'Card Number',
                   members.member_IsBiometric as Biometric,
                   members.member_DOB as DoB,
                   mshiptypes.mshipType_Name as Membership,
                   mshipstatustypes.mshipStatusType_Name as Status,
                   membertomships.memberToMship_EndDate as Expiry
                     FROM members
    INNER JOIN membertomships ON membertomships.member_Id = members.member_Id
     INNER JOIN mshipoptions ON mshipoptions.mshipOption_Id = membertomships.mshipOption_Id
    INNER JOIN mshiptypes ON mshiptypes.mshipType_Id = mshipoptions.mshipType_Id
    INNER JOIN mshipstatustypes ON mshipStatusTypes.mshipStatusType_Id = membertomships.mshipStatusType_Id
    WHERE memberToMship_EndDate BETWEEN '2011-09-24' AND '2011-09-30'
    AND members.member_active LIKE 'y%'
    AND (YEAR(CURDATE(members.member_Dob))-YEAR()) - (RIGHT(CURDATE(),5)< RIGHT(member_Dob,5)) BETWEEN '21' AND '102'
    ORDER BY members.member_Lastname

遇到这样的错误......

     Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'member_Dob))-YEAR()) - (RIGHT(CURDATE(),5)< RIGHT(member_Dob,5)) BETWEEN '21' AN' at line 19

最佳答案

试试这个:

SELECT * FROM MEMBER
WHERE (YEAR(CURDATE())-YEAR(member_dob)) - (RIGHT(CURDATE(),5)<RIGHT(member_dob,5)) 
BETWEEN 18 AND 24

WHERE 子句有年龄计算公式。用当年减去出生年份得到年数,如果当前某日某月小于DOB的某日某月则减1。如果您遇到数据类型不匹配错误,请使用 STR_TO_DATE(member_dob, '%Y-%M-%d') 将字符串 DOB 转换为 DATETIME DOB。

关于mysql - 使用mysql根据年龄过滤成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445074/

相关文章:

sql - 如何使用 Jsonb 从给定日期检索消息?

sql - 运行前检查查询结果

SQL SERVER 2014 - 拆分字符串并转换为 INT

python - Django 相关领域总是仅在生产中抛出完整性错误

MySQL MERGE 存储引擎

sql - 仅允许 10 个字符串 "username"实例的约束

sql - Gnome 的 libgda 和 SQL 注入(inject)

mysql - 从 MySQL 表中删除部分重复项

php - 我需要做什么来清理 textarea 中的数据以提供给 mysql 数据库?

mysql - 第 1 列包含名称,第 2 列包含值