sql - 改变 NULL 在排序中的位置

标签 sql sql-server sql-server-2008 sorting null

我正在整理表格。可以找到 fiddle here .

CREATE TABLE test
(
field date NULL
);

INSERT INTO test VALUES
('2000-01-05'),
('2004-01-05'),
(NULL),
('2008-01-05');

SELECT * FROM test ORDER BY field DESC;

我得到的结果:

2008-01-05
2004-01-05
2000-01-05
(null)

但是我需要这样的结果:

(null)
2008-01-05
2004-01-05
2000-01-05

因此 NULL 值被视为高于任何其他值。有可能吗?

最佳答案

最简单的方法是首先添加一个额外的排序条件:

ORDER BY CASE WHEN field is null then 0 else 1 END,field DESC

或者,您可以尝试将其设置为其数据类型的最大值:

ORDER BY COALESCE(field,'99991231') DESC

COALESCE/ISNULL 工作正常,前提是您没有使用相同最大值的“真实”数据。如果需要,并且需要区分它们,请使用第一种形式。

关于sql - 改变 NULL 在排序中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946632/

相关文章:

sql-server - 如何在 SQL Server 中获取逐列约束

sql-server - 为 Sql Server 中的 nvarchar 列选择可以区分 'ss' 和 'ß' 的二进制排序规则

仅基于月和年的 SQL Server 日期比较

sql - 在 OPENROWSET 查询中使用变量

python - Datalab 到 BigQuery - 将变量值插入 SQL 中

使用表 2 值添加到表 1 时出现 PHP SQL 语法错误

sql - 结果以多行形式返回

sql-server - 如何从主数据库中删除用户定义的对象

Mysql MATCH AGAINST 和 IN

mysql - 重复行 SQL 查询