Reputation: 1113
In mysql database I have a table named bug_list
tables name: bug_list
id projectId created_date
1 5 2012-06-30 13:30:57
2 5 2012-07-30 10:30:58
3 5 2012-07-30 12:30:44
4 5 2012-07-31 13:30:14
5 5 2012-07-31 14:30:32
I want to sort it by month (like jan, feb... ) in the first result,
sort it by week day (like mon, tue, wed) in the second result
and sort it by hour (like 2hrs range say 8-10am, 10-12pm....) in the third result
I can't understand from criteria query. Can somebody explain how to resolve this issue?
Upvotes: 1
Views: 5147
Reputation: 4831
HERE you can find something useful.
Start by extending Hibernate Order class:
public class CustomizedOrderBy extends Order {
private String sqlExpression;
protected CustomizedOrderBy(String sqlExpression) {
super(sqlExpression, true);
this.sqlExpression = sqlExpression;
}
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
return sqlExpression;
}
public static Order sqlFormula(String sqlFormula) {
return new CustomizedOrderBy(sqlFormula);
}
public String toString() {
return sqlExpression;
}
}
Then use some SQL formula:
criteria.addOrder(CustomizedOrderBy.sqlFormula("MONTH("+sortBy.getInnerName()+")"+ asc));
criteria.addOrder(CustomizedOrderBy.sqlFormula("WEEKDAY("+sortBy.getInnerName()+")"+ asc));
criteria.addOrder(CustomizedOrderBy.sqlFormula("HOUR("+sortBy.getInnerName()+")"+ asc));
Upvotes: 1
Reputation: 5846
"i want to sort it by month(like jan, feb... ) in first result"
ORDER BY MONTH(created_date)
"sort it by weekly(like mon, tue, wen) in second result"
ORDER BY WEEKDAY(created_date)
sort it by hour(like 2hrs range say 8-10am, 10-12pm....) in third result
ORDER BY HOUR(created_date)
or by time spans
ORDER BY CASE
WHEN HOUR(created_date) BETWEEN 8 AND 9 THEN 1
WHEN HOUR(created_date) BETWEEN 10 AND 12 THEN 2
WHEN HOUR(created_date) BETWEEN 13 AND 17 THEN 3
ELSE 4
END
Upvotes: 2