小编bil*_*ord的帖子

SQL Server按怪异顺序排序

我正在尝试将一些SQL移植到代码中,并且我注意到SQL Server的ORDER BY(和分区ORDER BY)在某些情况下似乎表现得有些不确定,但也许我只是没有看到这种模式.我正在使用Azure SQL数据库,它应该或多或少是SQL Server 2017,但有一些限制.

这里有些例子:

select * from (
    values
        ('2014-01-01', NULL),
        ('2014-01-02', NULL),
        (NULL, '2014-01-01 00:01:00'),
        (NULL, '2014-01-01 23:59:59')
) AS temp (t, u)
order by isnull(t, u);
Run Code Online (Sandbox Code Playgroud)

生成以下意外结果集,其中日期时间在同一天的日期之前,而较晚的日期时间在之前的日期之前:

t           u
NULL        2014-01-01 23:59:59
NULL        2014-01-01 00:01:00
2014-01-01  NULL
2014-01-02  NULL
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加一些额外的行:

select * from (
    values
        ('2014-01-01', NULL),
        ('2014-01-02', NULL),
        (NULL, '2014-01-01 00:01:00'),
        (NULL, '2014-01-01 23:59:59'),
        (NULL, '2014-01-01 00:00:00'),
        (NULL, '2014-01-02 00:00:00')
) AS temp (t, u)
order by isnull(t, u);
Run Code Online (Sandbox Code Playgroud)

日期仍在日期时间之后,但现在日期时间依次为:

t           u
NULL …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

3
推荐指数
1
解决办法
43
查看次数

标签 统计

sql ×1

sql-server ×1