8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

意外と知らない?地味だけど便利なMySQL関数たち

Posted at

こんにちは。株式会社LiemPiaのtampopo256です。
普段は教育系のWebサービス「clemy」を作ったりしています。

さて、MySQLって結構長い付き合いなんですが、使えば使うほど、

「え、こんな関数あったの!?」

ということが出てきます。
今回は、意外と知られていないけど、地味に便利なMySQLの関数たちを紹介します。

1. FIELD():値の「順位」を返すやつ

たとえば、こういうやつ。

SELECT FIELD('banana', 'apple', 'banana', 'orange'); -- → 2

「banana」は2番目に出てきたので、結果は2。
見つからないと0になります。

SELECT FIELD('grape', 'apple', 'banana', 'orange'); -- → 0

これ、地味に便利で、手軽な並び順カスタムに使えます。

ORDER BY FIELD(status, 'pending', 'review', 'done')

これで、SQLだけでカスタムソートできます。
CASE WHENでゴリゴリ書いてた自分、さようなら👋

2. ELT():インデックスから値を引く逆バージョン

これはFIELD()の逆みたいなやつです。

SELECT ELT(2, 'apple', 'banana', 'orange'); -- → banana

インデックス2を指定すると、2番目の'banana'を返します。
地味にENUMのラベル化とかに使えたりします。

3. FIND_IN_SET():カンマ区切り文字列を検索できる

SELECT FIND_IN_SET('banana', 'apple,banana,orange'); -- → 2

「banana」は2番目に出てきた、という意味。
つまり、DB設計が微妙で、CSVで値が入ってるテーブルに出会ったときの救済関数。

SELECT * FROM fruits WHERE FIND_IN_SET('apple', tags);

※もちろん正規化したほうが良いです。

  1. IFNULL()とNULLIF():名前がややこしい双子関数
    違い、ちゃんと覚えてますか?
SELECT IFNULL(NULL, 'default'); -- → 'default'

こっちはNULLだったら第2引数を返すやつ。

SELECT NULLIF(1, 1); -- → NULL
SELECT NULLIF(1, 2); -- → 1

こっちは「2つが等しければNULLを返す」。
0で割るなエラーを避けるときに役立ちます。

SELECT 10 / NULLIF(0, 0); -- → NULLになるからエラー回避

地味だけど、覚えておくと助けてくれます。

5. STR_TO_DATE() と DATE_FORMAT() の合わせ技

日付フォーマットを変換するとき、毎回ググってませんか?

SELECT STR_TO_DATE('2025/06/17', '%Y/%m/%d'); -- → '2025-06-17'
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日'); -- → '2025年06月17日'

人に読ませる用にもってこい。

おわりに

MySQLって、なんかいつも COUNT(*) と GROUP BY しか使ってない気がしますよね。
でも、こういう地味な関数たちもちゃんと使ってあげると、

「SQL、ちょっと気が利くじゃん?」

って思えたりします。

今回紹介した関数たちは、clemyの運用でもちょこちょこ使っていて、「あ〜これあったんだ助かる〜」ってなった子たちばかりです。

もし他にも「これ使えるよ!」っていう関数があれば、コメントで教えてもらえると嬉しいです 🙌

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?