我刚刚问了一个与这个问题非常相似的问题...
目前我在语句中执行一个非常基本的OrderBy。
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
问题在于,对于“position”为空字符串的条目被视为0。因此,所有“position”为空字符串的条目出现在那些'1,2,3,4'之前。例如:
'', '', '', 1, 2, 3, 4
或者:
0, 0, 0, 1, 2, 3, 4
有没有一种方法可以实现以下排序:
1, 2, 3, 4, '', '', ''.
或者:
1, 2, 3, 4, 0, 0, 0.
我猜解决方案可能有某种替换函数,但我找不到符合我的要求的函数。
position
应该是一个整数列,如果是这样的话,CASE
表达式应该使用整数,而不是字符串。如果position
不是整数或至少是数字,以数字排序就无法工作。此外,这个解决方案增加了一个新的排序列,很可能会对性能产生负面影响。如果我的假设是正确的,即position
实际上是一个整数,那么 OP 可能指的是在 'empty string' 写入时的NULL
值,这意味着你可以简单地写成ORDER BY COALESCE(position, ~0), id DESC
。 - Roland Bouman