15

曜日名を含むvarchar列でmysqlの結果を並べ替えるにはどうすればよいですか?

日曜日ではなく、月曜日が最初になることに注意してください。

4

10 に答える 10

6

なぜこれではないのですか?

ORDER BY (
    CASE DAYOFWEEK(dateField)
    WHEN 1 THEN 7 ELSE DAYOFWEEK(dateField)
    END
)

月曜日から日曜日までの注文だと思います...

于 2013-07-22T21:14:07.493 に答える
1

... ORDER BY date_format(order_date, '%w') = 0, date_format(order_date, '%w') ;

于 2009-07-16T04:25:52.187 に答える
1

これは古いスレッドであることは承知していますが、特定の検索時間で Google のトップになると、それを使用して私のアプローチを共有します。

元の質問と同じ結果が欲しかったのですが、さらに、現在の曜日から始まり、残りの日まで結果を並べたいと思っていました。

別の表を作成しました。この表には、2 週間にわたる日がリストされているため、どの日から始めても 7 日間のシーケンスを実行できます。

CREATE TABLE IF NOT EXISTS `Weekdays` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

INSERT INTO `Weekdays` (`id`, `name`) VALUES
(1, 'Monday'),
(2, 'Tuesday'),
(3, 'Wednesday'),
(4, 'Thursday'),
(5, 'Friday'),
(6, 'Saturday'),
(7, 'Sunday'),
(8, 'Monday'),
(9, 'Tuesday'),
(10, 'Wednesday'),
(11, 'Thursday'),
(12, 'Friday'),
(13, 'Saturday'),
(14, 'Sunday');

次に、開始点を順番に決定する変数を使用してクエリを実行し、結合を使用してその日の注文番号を取得しました。たとえば、水曜日にリストを開始するには、次のようにします。

SELECT @startnum := MIN(id) FROM Weekdays WHERE name='Wednesday';
SELECT * FROM Events INNER JOIN ( SELECT id as weekdaynum, name as dayname FROM Weekdays WHERE id>(@startnum-1) AND id<(@startnum+7) ) AS s2 ON s2.dayname=Events.day ORDER BY weekdaynum;

これが、この投稿に出くわした人に役立つことを願っています.

于 2012-02-19T14:43:33.033 に答える
-1

これを試すと、うまくいくはずです:

SELECT ename, TO_CHAR(hiredate, 'fmDay') as "Day" 
FROM my_table
ORDER BY MOD(TO_CHAR(hiredate, 'D') + 5, 7)
于 2014-06-01T18:13:57.263 に答える