【问题标题】:How to manage complex sorting in SQL?如何在 SQL 中管理复杂的排序?
【发布时间】:2020-06-14 20:37:45
【问题描述】:

我需要对部分日期进行日期排序。我有一个包含以下列的表格。

Day     Month   Year
--      ----    -----
NULL    03      1990
26      10      1856
03      07      Null
31      NULL    2018
NULL    NULL    NULL 

我有一个网格,其中一列是日期,我将上述三列组合并显示日期。

现在我想对网格中的这个日期列进行排序。日期的排序顺序应如下所示:

[blank date]
22 [day]
March
April 12
May
July 29
August
September
September 14
October
1948
October 1948
October 1 1948
July 1976
1977
July 1977
July 23 1977
December 1981
December 29 1981

我尝试了各种方法来实现这一点。但我无法得到想要的结果。以下是我申请的一些方式。

我尝试通过创建存储过程进行排序,在该存储过程中,我通过组合 3 列并将它们转换为标准日期格式并比较值来创建整个日期。我还尝试通过在模型中创建计算属性并相应地对它们进行排序。

如何在 SQL 中执行此操作?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sorting date columnsorting


【解决方案1】:

我认为你可以这样做:

order by coalesce(year, '0000'), coalesce(month, '00'),  coalesce(day, '')

您可以更明确,但这会将NULL 值放在列中的其他值之前。

注意:这使用 SQL 标准运算符进行字符串连接。并非所有数据库都支持这一点,因此您可能需要调整数据库的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多