如何以自定义格式而不是字母数字排序sql数据

zbdgwd5y  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(325)

请我想知道,是否有可能在sql中的顺序查询结果在不同的格式比标准的字母数字顺序的列。例如,考虑表“table”,
样品表
下面的脚本将根据“color”列按字母顺序排列表格:

SELECT * FROM Table ORDER BY Color;

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

sbtkgmzw

sbtkgmzw1#

使用mysql时:

ORDER BY FIELD(Color,'GREEN','BLUE,'RED') ASC

文档:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field
请注意,如果第一个参数的值在后面的参数中根本不存在,或者当它为null时,字段(..)的值将计算为0。因此,如果这些案例中有任何一个属于可能性,那么你需要格外小心,否则这些将是最好的结果。因此,在这种情况下,我个人会以相反的顺序提供所需的顺序,并使用desc,例如在您的情况下:

ORDER BY FIELD(Color,'RED','BLUE,'GREEN') DESC
r3i60tvu

r3i60tvu2#

订购人 FIELD 对于mysql中的情况,这可能是最好的即时解决方案。但一个可能的长期解决方案是添加另一个表,该表根据颜色保持排序顺序,例如。 TableColor :

Color | Position
GREEN | 1
BLUE  | 2
RED   | 3

然后,您只需将此表联接到当前表即可使用它进行排序:

SELECT t1.*
FROM yourTable t1
INNER JOIN TableColor t2
    ON t1.Color = t2.Color
ORDER BY
    t2.Position;

这种方法的优点是,如果你有几十种不同的颜色,它的伸缩性很好。在这种情况下,一个 FIELD 表情,或者更糟的是,一个 CASE 表达式,将不能很好地扩展,可能很难保持。

gcuhipw9

gcuhipw93#

你可以用 CASE :

SELECT * 
FROM Table 
ORDER BY CASE Color WHEN 'GREEN' THEN 1 WHEN 'BLUE' THEN 2 ELSE 3 END;

相关问题