4

これが私の検索結果です(cruise_dateによる):

CRUISE_DATE     DAYS_TILL_CRUISE    NAME
10/13/2012  29  Octobertfest
10/20/2012  36  Rare Air Show,
10/20/2012  36  Bugs and Bratz
11/10/2012  57  Fall Color Super Cruise
11/10/2012  57  Club Cruise-In to Desoto State Park
9/22/2012   8   Bugs on the Bayou
9/23/2012   9   Hot Dogs and Hot Rods

日付が 10 月、11 月、9 月になることに注意してください。これは私のSQL文です:

SELECT
         DATE_FORMAT(cruise_date, '%c/%e/%Y') AS cruise_date,
         DATEDIFF(cruise_date, CURDATE()) AS days_till_cruise,
         NAME
FROM
         `cruise`
WHERE
         `cruise_date` >= '2012-09-14'
ORDER BY

       `cruise_date`

日付が正しく並べ替えられないのはなぜですか?

ここをクリックして実際の動作を確認してください

4

3 に答える 3

4

DATE_FORMAT(cruise_date, '%c/%e/%Y')フィールドではなく、 の結果に基づいてテキストでソートされるようになりましたcruise_date。試してみてくださいORDER BY cruise.cruise_date

于 2012-09-14T11:09:30.127 に答える
3

これは、SELECT句で同じエイリアスを使用しているためです。cruise.cruise_dateエイリアスを別のものに変更するか、句で使用する必要がありORDER BYます。そうしないと、選択からテキスト列でレコードがソートされます。これを試して:

SELECT
         DATE_FORMAT(cruise_date, '%c/%e/%Y') AS cruise_date_1,
         DATEDIFF(cruise_date, CURDATE()) AS days_till_cruise,
         NAME
FROM
         `cruise`
WHERE
         `cruise_date` >= '2012-09-14'
ORDER BY

       `cruise_date`

SQLFiddle デモ

于 2012-09-14T11:11:33.840 に答える
1

または、注文してみてくださいdays_till_cruise

ORDER BY
       `days_till_cruise`
于 2012-09-14T11:12:30.547 に答える