首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何以自定义格式而不是字母数字方式对SQL数据进行排序

如何以自定义格式而不是字母数字方式对SQL数据进行排序
EN

Stack Overflow用户
提问于 2018-10-13 15:18:07
回答 3查看 248关注 0票数 1

请知道是否可以在SQL中以与标准的字母数字排序列不同的格式对查询结果进行排序。例如,考虑表“表”,

样本表

以下脚本将按“Color”列按字母顺序排列该表:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM Table ORDER BY Color;

我怎么能订购这样的颜色顺序是绿色,蓝色,红色?也就是说,如何使用我定义的订单格式进行订购?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-13 15:23:19

使用MySQL时:

代码语言:javascript
代码运行次数:0
运行
复制
ORDER BY FIELD(Color,'GREEN','BLUE,'RED') ASC

文档:字段

注意字段(.)如果第一个参数的值在后面的参数中根本不存在,或者当它为NULL时,则计算为0。因此,如果这些案例中的任何一个属于这些可能性,那么你需要格外小心,否则,这些都将是最重要的结果。因此,在这种情况下,我亲自提供了所需的反向顺序,并使用DESC,例如,在您的情况下:

代码语言:javascript
代码运行次数:0
运行
复制
ORDER BY FIELD(Color,'RED','BLUE,'GREEN') DESC
票数 5
EN

Stack Overflow用户

发布于 2018-10-13 15:19:32

你可以用CASE

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * 
FROM Table 
ORDER BY CASE Color WHEN 'GREEN' THEN 1 WHEN 'BLUE' THEN 2 ELSE 3 END;
票数 1
EN

Stack Overflow用户

发布于 2018-10-13 15:32:30

FIELD订购可能是您在MySQL中的最佳即时解决方案。但是,一个可能的长期解决方案是添加另一个表来维护基于颜色的排序顺序,例如TableColor

代码语言:javascript
代码运行次数:0
运行
复制
Color | Position
GREEN | 1
BLUE  | 2
RED   | 3

然后,您只需要将此表加入到当前表中,就可以使用该表进行排序:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT t1.*
FROM yourTable t1
INNER JOIN TableColor t2
    ON t1.Color = t2.Color
ORDER BY
    t2.Position;

这种方法的优点是,如果你最后有几十种不同的颜色,它就能很好地缩放。在这种情况下,FIELD表达式,或者更糟糕的是,CASE表达式,不能很好地扩展,而且可能很难维护。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52794405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档