【问题标题】:SQL Server: How to order by date, if the date is < GetDate()SQL Server:如何按日期排序,如果日期是 < GetDate()
【发布时间】:2009-11-30 05:03:07
【问题描述】:

这是一个有趣的...希望我能解释清楚...

我在我的 SQL Server 数据库的一个表中收集了一组竞赛。我正在对它们进行全文搜索,效果很好。但是,有些比赛是封闭的,我希望这些封闭的比赛在公开比赛之后出现,同时仍然尊重我们从全文搜索中获得的排名。

所以,如果我有一个 IsOpen 位字段,我会按

排序它们
ORDER BY IsOpen DESC, KEY_TBL.Rank DESC

现在的问题是我没有 IsOpen 位字段。相反,我有一个 ClosedDate 字段,它是一个日期时间。

所以我真正需要做的是:

ORDER BY (ClosingDate < GetDate()) ASC, KEY_TBL.Rank DESC

有人知道怎么做吗?

任何想法都会很棒!提前致谢。

-EV

【问题讨论】:

    标签: sql sql-server datetime full-text-search sql-order-by


    【解决方案1】:
    ORDER BY
      CASE
        WHEN (ClosingDate < GetDate())
        THEN 1
        ELSE 0
      END ASC,
      KEY_TBL.Rank DESC
    

    【讨论】:

    • @DavidB - 非常感谢。它奏效了。但是,我会在这里提到,一旦我实施了您的建议,我意识到我可以通过简单地按 ClosedDate 订购来获得相同的结果!哈哈,但是是的,这就是我问的 - 感谢您的快速回答! :)
    【解决方案2】:

    将 (ClosingDate

    select ... , add (ClosingDate < GetDate()) as Foo
    from ...
    where ...
    order by foo
    

    可能添加 (ClosingDate IF(add (ClosingDate

    我不知道那个IF函数的语法,查一下!

    【讨论】:

    • CASE 是更好的选择,但您的算法在其他方面是合理的。
    • 我会得出同样的结论.. TSQL 中有 select if(..) 吗? CASE 更灵活,因为它可以扩展到其他条件..
    • 感谢您的回答,这是我想要的正确想法 - 朝着正确的方向很好地引导,但语法不正确 - 我无法获得 ADD 或 IF () workign,但我找到了 CASE 并且效果很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多