1

在 mysql 数据库中,我有一个名为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 

我想在第一个结果中按月(如 jan、feb...)
排序,在第二个结果中按工作日(如 mon、tue、wed)
排序并按小时排序(如 2hrs 范围说 8-上午 10 点,晚上 10 点到 12 点....)在第三个结果中

我无法从标准查询中理解。有人可以解释如何解决这个问题吗?

4

2 回答 2

2
  1. “我想在第一个结果中按月份(如 1 月、2 月 ...)对其进行排序”

    ORDER BY MONTH(created_date)
    
  2. “在第二个结果中按每周(如星期一、星期二、文)排序”

    ORDER BY WEEKDAY(created_date)
    
  3. 在第三个结果中按小时排序(比如 2 小时范围,比如上午 8 点到 10 点,晚上 10 点到 12 点....)

    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
    
于 2012-08-07T12:04:52.787 回答
1

在这里你可以找到一些有用的东西。

从扩展 Hibernate 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));
于 2012-08-07T12:19:11.753 回答