【问题标题】:Is this how COALESCE works in this MS SQL Query: ORDER BY COALESCE([UpdatedOn], [CreatedOn]) DESC这是 COALESCE 在此 MS SQL 查询中的工作方式: ORDER BY COALESCE([UpdatedOn], [CreatedOn]) DESC
【发布时间】:2020-08-17 08:30:42
【问题描述】:

我正在查看一些在ORDER BY 中使用COALESCE 语句的SQL 语句。我已阅读有关 COALESCE 的文档,因此我试图了解在这种情况下我是否了解它是如何被使用的。

这是sql语句的一部分:

ORDER BY COALESCE([UpdatedOn], [CreatedOn]) DESC

是不是想说这个(通过我编造的一些假数据):

** 注意:日期格式为yyyy-mm-dd

 ELID |  LK   |  CreatedOn |  UpdatedOn | Computed-OrderBy
+---------------------------------------------------------
    1 | 'aaa' | 2020-01-01 | 2020-01-02 | 2020-01-02
    2 | 'bbb' | 2020-01-01 |       NULL | 2020-01-01

那么,这就是结果(在内存等中),SQL Server 将在Computer-OrderBy 列中对结果进行排序(我们从未真正看到)

所以结果是有序的:

ELID 2 - 2020-01-01
ELID 1 - 2020-01-02

更新 1:如果 COALESCE 在 SELECT 语句中,那么我不会问问题,因为我摸不着头脑。我在问什么时候ORDER BY'ing .. SQL sorta 在幕后是如何做到的。请注意我是如何创建一个新列 Computed-OrderBy 的?好吧,我希望看看这或多或少是 Sql Server 所做的......所以它知道如何按那些“计算”值排序。

【问题讨论】:

  • 那么,您在这里实际问的是什么,COALESCE 是做什么的?你看过documentation吗?
  • 是的,我想看看我对 COALESCE 的理解是否正确。就像在幕后一样,这就是正在发生的事情。我会更新我的帖子以反映您的问题。
  • 将COALESCE([UpdatedOn], [CreatedOn]) 放入SELECT 列表中,看看它会返回什么。
  • 感谢@CaptainKenpachi 的评论。那么我是如何写出“假数据”的......就像你说的那样?
  • 哦,是的,您的语句中的顺序颠倒了,所以它是正确的。

标签: sql sql-server coalesce


【解决方案1】:

根据COALESCE (Transact-SQL) 上的文档,它执行以下操作:

按顺序计算参数并返回最初不计算为 NULL 的第一个表达式的当前值。例如,SELECT COALESCE(NULL, NULL, 'third_value', 'fourth_value'); 返回第三个值,因为第三个值是第一个不为空的值。

COALESCE 在ORDER BY 中的事实并没有改变这一点。如果COALESCE 是非NULL 值,则COALESCE 将返回UpdatedOn 的值,然后返回CreatedOn 的值。如果两者都是NULL,则将返回NULL。

由于表达式位于ORDER BY 中,因此您的结果将根据表达式的结果按(升序)顺序排列,为表达式返回的具有NULL 的行被视为具有最低值,日期9999-12-31 最大。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多