【问题标题】:how can i sort this either in sql query or arraylist?我如何在 sql 查询或 arraylist 中对此进行排序?
【发布时间】:2018-05-02 15:10:48
【问题描述】:

这是我正在使用的查询,我想要排序结果,例如 11/2017、12/2017、3/2018 5/2018

如果不能在查询中完成,那么如果我可以在 android java arraylist 中完成,请帮助

【问题讨论】:

  • SELECT distinct monthyear from notes ORDER BY monthyear ASC,
  • monthyear 是如何存储的?例如,它是一个日期字段吗?您还应该说明 SQL 的风格,例如我的 SQL。看起来像是在使用 T-SQL。如果您执行以下命令: exec sp_help 'notes' 您应该能够查看它的存储方式。
  • @AbdulWaheed 它给出的结果与图像中的结果相同,这是 asc 顺序
  • @QHarr 就像图片中显示的月/年
  • 尝试以正确的格式存储日期。即:YYYY-MM-DD.

标签: java android sql sorting arraylist


【解决方案1】:

在 Java 中你可以使用:

SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");
Collections.sort(list, new Comparator<String>() {
  @Override
  public int compare( String d1, String d2) {
    if(d1.equals(d2)) return 0;
    try {
      Date date = sdf.parse(d1);
      Date date2 = sdf.parse(d2);
      return date.before(date2)? -1:1;
    }catch (ParseException exception){
      Log.e("Date compare ->", exception.getMessage(), exception);
      return  0;
    }
  }
});

如果你使用 lambda,你可以使用更短的版本:

SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");
        Collections.sort(list, (Comparator<String>) (d1, d2) -> {
            if(d1.equals(d2)) return 0;

            try {
                Date date = sdf.parse(d1);
                Date date2 = sdf.parse(d2);
                return date.before(date2)? -1:1;
            }catch (ParseException exception){
                Log.e("Date compare ->", exception.getMessage(), exception);
                return  0;
            }
        });

Android API level 24 让你可以使用 list.sort 方法:

SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");
        list.sort((Comparator<String>) (d1, d2) -> {
            if(d1.equals(d2)) return 0;

            try {
                Date date = sdf.parse(d1);
                Date date2 = sdf.parse(d2);
                return date.before(date2)? -1:1;
            }catch (ParseException exception){
                Log.e("Date compare ->", exception.getMessage(), exception);
                return  0;
            }
        });

【讨论】:

    【解决方案2】:

    试试这个,

    SELECT distinct monthyear FROM notes ORDER BY date(monthyear) DESC
    

    注意:在这里,您要按日期排序,因此您需要使用 date()。如果你想要日期和时间都,你需要使用datetime()

    【讨论】:

    • 它说“日期”不是一个可识别的内置函数名称。
    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2016-08-28
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多