sql >> データベース >  >> RDS >> Mysql

mysqlの結果を異常な順序で並べ替える必要があります

    これが私がそれをする方法です:

    SELECT *, (DATE_FORMAT(date, '%j')-DATE_FORMAT(NOW(), '%j')+365)%365 AS d 
    FROM foo ORDER BY d;
    

    %j 日付形式はその年の日、つまり001...366という数字です。

    これをいくつかのサンプルデータでテストしたところ、説明どおりに並べ替えられます。年は無視され、現在の日付の次の日付が最初に並べ替えられ、次に昇順で並べ替えられ、年の前の日付に折り返されます。

    >
    +----+------------+------+
    | id | date       | d    |
    +----+------------+------+
    |  5 | 1999-05-15 |   27 |
    |  6 | 1992-06-15 |   59 |
    |  7 | 1990-07-15 |   88 |
    |  8 | 1988-08-15 |  120 |
    |  9 | 1980-11-15 |  212 |
    |  1 | 2010-01-15 |  272 |
    |  2 | 2009-02-15 |  303 |
    |  3 | 2004-03-15 |  332 |
    |  4 | 2002-04-15 |  362 |
    +----+------------+------+
    


    1. innoDBデッドロックの処理

    2. MYSQLで列を行に変換する必要があります

    3. SQLServer2005からMySQLにデータをエクスポートする方法

    4. 共有を排他ロックにアップグレードする際のMySQLデッドロックの回避