数据库中自定义排序
场景:有一张banner表,表中有一个status字段,有0, 1, 2
三个状态位,我想要1,0,2
的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序(这里看个人需求)。
普通的sql只能对一个字段进行简单的大小排序,如下:
SELECT* FROMbanner ORDER BY`status`,sequence ASC;
这里我们对banner这张表中的status字段先进行排序,然后对排序后的子集再对sequence字段进行排序。
但这样排序的话,我的status的排序顺序就成了0,1,2
的顺序了,如何达到1,0,2
呢? 就需要使用带数据库的函数,如下:
Oracle(decode函数):
SELECT* FROMbanner ORDER BYdecode( `status`, '别名1', 1, '别名2', 0, '别名3', 2 ),sequence ASC;
Mysql(field函数):
SELECT* FROMbanner ORDER BYfield( `status`, 1, 0, 2 ),sequence ASC;
效果如下:
以上!感谢我的专属DBA刘某
~ 😘
数据库中自定义排序规则 Mysql中自定义字段排序规则 Oracle中自定义字段排序规则 decode函数的用法 field函数的用法