当前位置: 首页 > news >正文

sql实现按照自定义顺序 排序

下面是mybatis xml实现得:

  select *from prod_project_deploywhere del_flag=0ORDER BYFIELD(approval_status,0,3,2),IF(ISNULL(progress_status),1,0) ,FIELD(progress_status,'测试1','测试2','测试3','测试4','测试5',''),create_time desc

IF(ISNULL(progress_status),1,0) , --将null强制放在最后
需求是状态值是null得在后面 加上这句 后面得这个 FIELD(progress_status,‘测试1’,‘测试2’,‘测试3’,‘测试4’,‘测试5’,‘’), 空在最后才能生效

楼主开始想在java代码中实现,用了很多方法都不行

java尝试 如下。这个方式支持一种自定义排序 两种就失效了

   // 自定义排序规则String str = ApprovalStatusEnum.SAVE.getValue() + ","+ ApprovalStatusEnum.NOTPASS.getValue() + ","+ ApprovalStatusEnum.PASS.getValue();List<String> statusOrder = Arrays.asList(StringUtils.split(str, ","));String str1 = 测试1,测试2,测试3,测试4,测试5";List<String> progressStatusOrder = Arrays.asList(StringUtils.split(str1, ","));List<Test> tests= testMapper.selectList(wrapper);tests.sort(Comparator.comparing((ProdProjectDeploy r) -> {for (int i = 0; i < statusOrder.size(); i++) {if (r.getApprovalStatus() == statusOrder.get(i)) {return i;}}return statusOrder.size(); // 返回一个不在自定义数组中的值,表示未找到的情况}).thenComparing(r -> {for (int j = 0; j < progressStatusOrder.size(); j++) {if (r.getProgressStatus() == progressStatusOrder.get(j)) {return j;}}return progressStatusOrder.size(); // 同上}).thenComparing(Test::getCreateTime).reversed());

欢迎交流,如果java能实现就太棒了


http://www.mrgr.cn/news/13771.html

相关文章:

  • vue3实现excel文件预览和打印
  • 利用移动语义优化 C++ 程序性能的实用指南
  • easyExcel 单元格合并
  • Image Stride(内存图像行跨度)
  • 初识Vue.js:从零开始构建你的第一个Vue项目
  • 在Linux中杀死占用某个端口的进程
  • pymysql cursor使用教程
  • DARKTIMES集成到Sui,带来中世纪格斗大逃杀游戏体验
  • Java使用Tesseract进行OCR图片文字识别
  • CannotCreateTransactionException产生原因及解决方案
  • 【C++二分查找】2271. 毯子覆盖的最多白色砖块数
  • c语言每日学习8.24
  • 视频监控汇聚智能分析安全帽佩戴检测算法工作原理未戴安全帽算法源码分享
  • 分布式中间件
  • MariaDB基本知识汇总
  • Java-多线程IO工具类
  • ctfhub-web-SSRF通关攻略
  • 代码随想录day55 寻找存在的路径
  • 【BES2500x系列 -- RTX5操作系统】Battery模块 -- 邮箱线程 Battery 钩子函数注册 --(十四)
  • 如何把控调整Facebook广告预算的正确时机