MySQL-如何按名称从a到z排序,但在底部放置空名称?

时间:2019-01-28 00:05:15

标签: mysql sql sql-order-by

我在表中有名字,姓氏,手机。在滚动列表中以“名字姓氏”表示

SELECT * FROM `sh_contact` order by firstname asc;

但是某些行包含空名,因此滚动列表显示为空" lastname".

避免用户界面混乱。如何将所有非空的名字放在顶部并在末尾显示空的名字?

3 个答案:

答案 0 :(得分:2)

这应该有效:

SELECT * FROM `sh_contact` ORDER BY CASE WHEN firstname = '' THEN 2 ELSE 1 END, firstname

DB Fiddle

答案 1 :(得分:1)

您可以使用多个键:

order by (case when firstname = '' or firstname is null then 1 else 2 end) desc,
         firstname asc

答案 2 :(得分:1)

尝试一下:

...
order by firstname is null, firstname

之所以可行,是因为在MySQL中,布尔表达式true为1,而布尔表达式0则按此排序将所有空名放在最后。

如果要将空白视为空值,请使用以下方法:

...
order by coalesce(firstname, '') = '', firstname

或者如果firstname从不为空,甚至更简单:

...
order by firstname = '', firstname