我的理解是nulls last
QoQ 是不可能的。无论我是对行进行升序还是降序排序,我如何欺骗coldfusion最后对空值进行排序?
我已经尝试在查询的 SELECT 和 ORDER 部分使用 case,但看起来 CF 不喜欢它(在 railo 上运行)
我的理解是nulls last
QoQ 是不可能的。无论我是对行进行升序还是降序排序,我如何欺骗coldfusion最后对空值进行排序?
我已经尝试在查询的 SELECT 和 ORDER 部分使用 case,但看起来 CF 不喜欢它(在 railo 上运行)
可能有更好的选择,但一个简单的技巧是添加一个表示排序优先级的列。为具有非空值的记录分配比空值更高的优先级。然后只需先按优先级值排序,然后再按您想要的任何其他列。由于空值具有较低的优先级编号,因此它们将始终排在最后。
<!--- 1 - non-null values 2 - null values --->
SELECT 1 AS SortOrder, SomeColumn
FROM theQuery
WHERE SomeColumn IS NOT NULL
UNION ALL
SELECT 2 AS SortOrder, SomeColumn
FROM theQuery
WHERE SomeColumn IS NULL
ORDER BY SortOrder, SomeColumn ASC
(值得注意的是,您可以在数据库查询中使用order by
而不是做类似的事情union
。)
ColdFusion 和 Railo 上的 QoQ 都具有非常有限的 SQL 词汇,并且没有任何内容涉及如何整理空值。因此,正如@Leigh 所建议的那样,添加另一列 - 没有任何空值 - 代表您想要的排序。
或者,如果可能的话,最好在数据库中处理所有这些。显然这并不总是可能的(因为您查询的记录集可能一开始就不是来自数据库;-)
...还有另一种方法,但它依赖于 values 是NULL
而不是 empty ''
。我在这里从记忆中开始,但这本质上是它,||
仅在值非空时才使用,因此首先使用空值降序排序,最后得到值。
<cfquery>
SELECT *, '1' || #sortCol# as isNull
FROM table
ORDER BY isNull desc, #sortCol#
</cfquery>
注意我实际上并不提倡使用它,我不确定 CF 是否会以同样的方式处理它