在SQL中按最后一项排序:强制一个值在排序中排在最后。

7

在SQL中,我使用了

...ORDER BY name DESC NULLS LAST

这个功能非常棒,但是我是否可以设置一个特定的值作为最后一个值?比如一个空字符串(@EMPTY)。

...ORDER BY name DESC (@EMPTY) LAST

我正在根据用户在表格上的选择动态构建 SQL,当用户更改排序顺序时,我将在 SQL 中更改我的排序顺序。此外,用户可以选择按哪一列进行排序。我要排序的列要么是类型为text,要么是类型为int。当column的类型为int时,我不需要任何花哨的ORDER BY,但是当columntypetext时,我需要强制将所有值为""的项目排在ORDER BY的末尾。
谢谢!
1个回答

11

您可以将case用作排序顺序的第一个元素:

order by
    case when name = '' then 1 else 0 end
,   name desc

嗯...这样做行得通吗,因为nametext类型?如果我将10强制转换为name,列类型就不匹配了。不过还是很好的尝试!我会试一下的。 - WebWanderer
这个答案按照两个不同的列进行排序。第一个列是整数类型,第二个列是文本类型。 - Andomar
@WebWanderer 是的,这个可行,因为你在将名称(字符串)与空字符串进行比较,所以类型相匹配,然后基于该比较返回了一个全新的对象,用于对结果进行排序。 - G B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接