SQL枚举排序

Sabthever

  在SQL取值最后排序的时候,我们有这样的一个业务需求,按照特定的字段值进行排序,针对这种情况简单讲述一下SQL的枚举排序。

  这边以MySQL为例,有3种方法。

1.case when ... then ... end

(最通用,所有数据库支持)

1
2
3
4
5
6
7
8
9
10
11
SELECT *
FROM categories
ORDER BY CASE seniority_category
WHEN '0-1年' THEN 1
WHEN '1-2年' THEN 2
WHEN '2-3年' THEN 3
WHEN '3-5年' THEN 4
WHEN '5-10年' THEN 5
WHEN '10年以上' THEN 6
ELSE 7 -- 处理未列出的值(可选)
END;

2.FIELD函数

(MySQL 特有)

1
2
3
SELECT *
FROM categories
ORDER BY FIELD(seniority_category, '0-1年', '1-2年', '2-3年', '3-5年', '5-10年', '10年以上');

3.字符串定位函数LOCATE

(通用性较好)

1
2
3
4
5
6
SELECT *
FROM categories
ORDER BY LOCATE(
CONCAT(',', seniority_category, ','),
',0-1年,1-2年,2-3年,3-5年,5-10年,10年以上,'
);

三种方案的对比:

方法 优点 缺点
FIELD() 简洁直观(MySQL专用) 数据库兼容性差
LOCATE() 无需硬编码数字,可动态调整顺序 需处理字符串拼接,可能有性能损耗
CASE WHEN 所有数据库通用,可读性强 需要手动维护数字映射

结束

本章就到这里了,Bye!!

  • 标题: SQL枚举排序
  • 作者: Sabthever
  • 创建于 : 2025-04-02 16:08:51
  • 更新于 : 2025-04-02 16:46:25
  • 链接: https://sabthever.online/2025/04/02/technology/java/SQL枚举排序/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。