【问题标题】:How to do MySQL order by x where (x=col3 if col3!=null, else x=col2)?如何按 x where (x=col3 if col3!=null, else x=col2) 对 MySQL 进行排序?
【发布时间】:2012-09-21 10:11:42
【问题描述】:

假设,一个选择操作给出了 3 列:col1、col2 和 col3。 col2 和 col3 是时间类型。我希望结果按时间戳排序。对于每条记录,如果 col3 不为空,则时间戳等于 col3,否则为 col2。如何做到这一点?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    使用内置函数ifnull()

    select
    ...
    order by ifnull(col3, col2)
    

    ifnull()如果不为null则返回第一个参数,否则返回第二个参数。

    【讨论】:

      【解决方案2】:

      您可以使用子查询来做到这一点。在内部查询中,您检查 col3 是否为 NULL,然后“选择”col3 或 col2 作为“my_time”。然后,在外部查询中,您按“my_time”排序。

      子查询示例:

      SELECT <whatever>, IF (col3 IS NOT NULL, col3, col2) AS my_time FROM <table>
      

      然后,外部查询:

      SELECT * FROM (
          SELECT <whatever>, IF (col3 IS NOT NULL, col3, col2) AS my_time FROM <table>
      ) AS <temp_table> ORDER BY <temp_table>.my_time
      

      【讨论】:

        猜你喜欢
        • 2016-12-05
        • 2018-10-13
        • 1970-01-01
        • 2013-02-28
        • 2015-05-15
        • 2019-12-27
        • 1970-01-01
        • 2014-07-25
        相关资源
        最近更新 更多