如何从db获取日期并将其与年龄进行比较

时间:2015-10-06 05:26:38

标签: java database spring hibernate dob

我在数据库中以这种格式DD / MM / YYYY(25/03/1984)存储出生日期。我在我的应用程序中有一个搜索表单,用户可以从年龄和年龄提供,以获取年龄限制之间的配置文件列表。如何处理这种情况。

  1. 我是否需要将年龄直接存储在数据库中(但年龄会每年都有变化)
  2. 我是否需要从数据库中获取日期并使用java逻辑从DOB中获取年龄并将其与日期和日期进行比较。(我真的不想要java逻辑。这是一条漫长的路线。我我对其他更容易解决的问题感兴趣。)
  3. Field         | Type
    user_id       | int(11)
    name          | varchar(100)
    mobile_number |varchar(45)
    date_of_birth |varchar(45)
    
    user_id| name  | mobile_number | date_of_birth
       1   | Test1 | 1234567890    | 25/03/1984
       2   | Test2 | 1234567890    | 25/03/1980
       3   | Test3 | 1234567890    | 25/03/1988
       4   | Test4 | 1234567890    | 25/03/1970
    

    请您建议一个处理这种情况的最佳方法。

3 个答案:

答案 0 :(得分:2)

以自然数据库格式存储生日

休眠:

@Temporal(DATE)
private Date birthday;

然后,您可以使用少于和大于其他日期来查询实体

SELECT u FROM USER u where u.birthday > :fromDate and u.birthday <= :toDate

答案 1 :(得分:0)

以下查询可以解决您的期望..

SELECT TRUNC(months_between(sysdate,dob)/12) YEAR,
  TRUNC(mod(months_between(sysdate,dob),12)) MONTH,
  TRUNC(sysdate-add_months(dob,TRUNC(months_between(sysdate,dob)/12)*12+TRUNC(mod(months_between(sysdate,dob),12)))) day
FROM
  (SELECT to_date('15-12-2000','DD-MM-YYYY') dob FROM dual
  );

Year Month day
  14    9   21

答案 2 :(得分:0)

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(STR_TO_DATE(u.date_of_birth, '%d/%m/%Y'), '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < 
DATE_FORMAT(STR_TO_DATE(u.date_of_birth, '%d/%m/%Y'), '00-%m-%d')) AS age,name,mobile_number from user u where DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(STR_TO_DATE(u.date_of_birth, '%d/%m/%Y'), '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < 
DATE_FORMAT(STR_TO_DATE(u.date_of_birth, '%d/%m/%Y'), '00-%m-%d')) between 30 and 35; 

我找到了解决方案。有人可以优化此查询。如何用hibernate实现这个。