MySQL由一个数字排序,空字符串(或0)最后

Jon*_*onB 7 mysql sql-order-by

刚问了一个与这个问题很相似的问题......

目前我在声明中做了一个非常基本的OrderBy.

SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Run Code Online (Sandbox Code Playgroud)

这个问题是'position'的空字符串条目被视为0.因此,位置为空字符串的所有条目都出现在1,2,3,4之前.例如:

'', '', '', 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

要么:

0, 0, 0, 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

有没有办法实现以下排序:

1, 2, 3, 4, '', '', ''.
Run Code Online (Sandbox Code Playgroud)

要么:

1, 2, 3, 4, 0, 0, 0.
Run Code Online (Sandbox Code Playgroud)

我假设解决方案可能有某种替换功能,但我无法找到能够完成我所追求的功能.

Red*_*ter 15

SELECT * 
FROM tablename 
WHERE visible=1 
ORDER BY 
    case when position in('', '0') then 1 else 0 end,
    position ASC, 
    id DESC
Run Code Online (Sandbox Code Playgroud)