読者です 読者をやめる 読者になる 読者になる

続・すみっこの記

富山生まれ下請けIT育ちのフリーライターが布団の中からお送りします

月によってORDER BY句に使用するカラムを変更する方法

仕事中詰まったのでメモしておきます。

やりたいこと

偶数月か奇数月かを判別し、ORDER BY句に用いるカラムを切り替えたい。

ID columnA columnB
1 A Z
2 B Y
3 C X
4 D W
5 E V

もし今が偶数月であればcolumnAを、奇数月であればcolumnBをORDER BY条件(降順)にしたい。

やらなきゃいけないこと

現在の月の取得(数値形式)

DATE_FORMAT(NOW(), '%c')

癖で「%d」を使ってたんですけど、7月の場合「07」が取れてしまって剰余算ができないんですね。
数値型で取得する「%c」を使います。

偶・奇数月の判別

MOD(DATE_FORMAT(NOW(), '%c'), 2) = 0

癖で「%2」を使ってましたけどMySQLではMOD関数を使います。
0ならば偶数月です。

ORDER BY句を切り替える

ORDER BY 
    (CASE WHEN MOD(DATE_FORMAT(NOW(), '%c'), 2) = 0
        THEN columnA 
        ELSE columnB
END) DESC

CASE文はORDER BY句でも使えるようです。便利ですね。

出来上がったSQL

SELECT
    ID
FROM
    table
ORDER BY 
    (CASE WHEN MOD(DATE_FORMAT(NOW(), '%c'), 2) = 0
        THEN columnA 
        ELSE columnB
END) DESC

参考ページ

MysqlでCase文を使ってOrder byしてみた|Pimp my Code. @wataru420

現場で使える MySQL (DB Magazine SELECTION)

現場で使える MySQL (DB Magazine SELECTION)

track feed すみっこの記