2012-08-07 106 views
0

排序数据在MySQL数据库我有表说bug_list休眠:通过日期和时间

表名:bug_list

ID 专案编号 CREATED_DATE
2012-06-30 13:30 :57
2012-07-30十点30分58秒
2012-07-30 12点30分44秒
2012-07-31十三时30分十四秒
2012-07-31十四时30分32秒

,我想每月对它进行排序(如一月,二月..在第一个结果。)通过每周
&排序它(如星期一,二,文)在第二结果
由小时排序它(如2小时范围说8-10am,在第三结果

10-12pm ....)

我不能从标准查询理解有人可以解释如何解决这个问题..

回答

1

HERE你可以找到一些有用的东西。

开始通过延长休眠Order类:

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; 
    } 

} 

然后使用一些SQL公式:

criteria.addOrder(CustomizedOrderBy.sqlFormula("MONTH("+sortBy.getInnerName()+")"+ asc)); 
criteria.addOrder(CustomizedOrderBy.sqlFormula("WEEKDAY("+sortBy.getInnerName()+")"+ asc)); 
criteria.addOrder(CustomizedOrderBy.sqlFormula("HOUR("+sortBy.getInnerName()+")"+ asc)); 
1
  1. “我想按月(如一月,二月...)在第一个结果排序为”

    ORDER BY MONTH(created_date) 
    
  2. “由每周对其进行排序(如星期一,二,文)在第二个结果“

    ORDER BY WEEKDAY(created_date) 
    
  3. 由小时排序它(如2小时范围说8-10am,10-12pm ....)在第三结果

    ORDER BY HOUR(created_date) 
    

    或时间跨度

    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 
    
+0

感谢名单Puggan 我会尽力 – 2012-08-07 12:09:25

+0

有序的方式得到,但如果我需要计算的价值那些 – 2012-08-07 13:11:45

+0

只是用'GROUP BY'来代表'ORDER BY' – 2012-08-07 13:23:05