我在数据库中以这种格式DD / MM / YYYY(25/03/1984)存储出生日期。我在我的应用程序中有一个搜索表单,用户可以从年龄和年龄提供,以获取年龄限制之间的配置文件列表。如何处理这种情况。
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
请您建议一个处理这种情况的最佳方法。
答案 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实现这个。