如何根据会员填写的出生日期计算年龄?而且要根据年龄进行搜索,如果用DATE类型的字段存储出生日期,搜索的时候要进行计算,会影响效率吗?大侠们是怎么做的呢?求指教哈。

解决方案 »

  1.   

    用DATE类型的字段存储出生日期,可以用1个冗余字段保存年龄,在此字段上建立索引
      

  2.   

    效率不是问题,前提是你的查询语句。 在表中严格禁止创建类似年龄这样的字段。这样会导致不符合范式。计算年龄,这个要看你的年龄规定是什么。周岁? 整数? 还是要精确到小数? 最简单的粗略算法就是直接减得到天,然后再除 365.
    select DATEDIFF(curdate(),datecolumn)/365 as Age from table1.
      

  3.   

    搜索时,应该使用的语句是比如查找 10 - 20 岁之间
    where datecolumn between curdate()-interval 20 year and curdate-interval 10 year这样可以利用索引。
      

  4.   


    接上面的一条回复,用where age between 10 and 20,是么?感谢。
      

  5.   

    重新计算、直接替换不行?
    OR
    在插入的TRIGGER中
    SET NEW.年龄=...
      

  6.   

    不添加AGE字段,直接用出生日期去判断。 用了AGE,难到每天还要去更新一下表中所有记录的年龄?
      

  7.   


    age是别名,不是新加的列哈。
      

  8.   

    这种写法会导致无法使用索引,每次都需要重新计算一下记录中的AGE。 正确的方法如4楼所述。