曜日名を含むvarchar列でmysqlの結果を並べ替えるにはどうすればよいですか?
日曜日ではなく、月曜日が最初になることに注意してください。
曜日名を含むvarchar列でmysqlの結果を並べ替えるにはどうすればよいですか?
日曜日ではなく、月曜日が最初になることに注意してください。
なぜこれではないのですか?
ORDER BY (
CASE DAYOFWEEK(dateField)
WHEN 1 THEN 7 ELSE DAYOFWEEK(dateField)
END
)
月曜日から日曜日までの注文だと思います...
... ORDER BY date_format(order_date, '%w') = 0, date_format(order_date, '%w') ;
これは古いスレッドであることは承知していますが、特定の検索時間で 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;
これが、この投稿に出くわした人に役立つことを願っています.
これを試すと、うまくいくはずです:
SELECT ename, TO_CHAR(hiredate, 'fmDay') as "Day"
FROM my_table
ORDER BY MOD(TO_CHAR(hiredate, 'D') + 5, 7)