我正在使用一个我无法控制的数据库(第三方系统),其中一个表允许'featured'列为EMPTY,0,1或NULL。
任何状态EMPTY,0,NULL都意味着同样的事情。
我按“特色”列进行排序,然后按“名称”列进行排序,但结果数据不按字母顺序排列,除非按字母顺序列表中的“精选”分组。
FEATURED | NAME
--------------------------
1 | Apple
1 | Orange
0 | Avocado
0 | Banana
0 | Cauliflower
NULL | Broccoli
NULL | Potato
| Cabbage
基本上,我需要将0,NULL,EMPTY视为相同的值,因此它们都按字母顺序排序。
理想输出示例
FEATURED | NAME
--------------------------
1 | Apple
1 | Orange
0 | Avocado
0 | Banana
NULL | Broccoli
| Cabbage
0 | Cauliflower
NULL | Potato
答案 0 :(得分:1)
如果你想要最后一次,我会用这样的表达式做到这一点:
order by (featured is null or featured = '0' or featured = ''),
name
您可以将其简化为:
order by ((featured > 0) and featured is not null) desc, name
如果你愿意。
答案 1 :(得分:1)
要将'0' or '' or NULL
值组合在一起,我会使用一个表达式"转换"其中两个值进入第三个,因此在所有三种情况下都返回相同的值。
featured
列似乎是字符类型,因此我避免了不必要的隐式数据类型转换,而我的偏好是一个相当短的表达式。
要将NULL
和'0'
转换为''
,请先对行进行排序(按升序排列),我会执行以下操作:
ORDER BY IFNULL(NULLIF(featured,'0'),''), name
如果我想返回NULL
作为公共值(因此这些行按升序顺序排列),我将''
和'0'
转换为{ {1}},像这样:
NULL