DBに入っている文字列データから濁点や半濁点を検索する

まっちー

まっちー

たとえば住所録なんかを作るような場合、表示側であ行~わ行で名前の一覧を表示分けしたいとする。

まあ、DBにデータを登録するときに、その何行なのかというのもデータで持っていれば特に問題はないのだろうけど、そういうカラムが(うっかり)作成されていなくて、名前とふりがなだけが入っていたら、ふりがなの先頭の文字からその名前が何行に属するのかを見ることになると思う。

ではここで、名前の先頭が「か」の名前のデータを取得したいとする。加賀まりこ(かがまりこ)とか鹿賀丈史(かがたけし)とかカート・コバーン(かーとこばーん)とかガイル(ソニックブームの人)とかが該当しますね。

SELECT * FROM users WHERE LEFT(kana,1) LIKE '%か%'

SQL文はこんな感じで大丈夫。kanaってのは、ここではふりがなが入っているカラムです。LEFT(kana,1)というのは、kanaのカラムに入っているデータの左から1文字を取得するものです。当然LEFT(kana,2)なら2文字取ってくる。

さて、上記のSQL文だとふりがなの先頭の文字が「か」の人のデータを取ってきます。つまり加賀まりこさん、鹿賀丈史さん、カート・コバーンさんのデータを取ってくる。ただし、ガイルは取ってこない。ソニックブームの人とか書いてるけどふりがなは「がいる」ですので、先頭が「そ」だからいけないんじゃねーのってわけじゃない。

まあ、当然と言うべきか、「か」と「が」は違う文字なので、これでは先頭が「が」の人は引っかからない。

SQL文にORを書いても良いのだけど、それもちょっとだるい。そんなときはどうするか。

実はカラムの照合順序をutf8_unicode_ciってのにすると、’%か%’と書くだけで「が」の方も取ってきてくれる。それどころかカタカナの「カ」とかも取ってきてくれるらしい。カートコバーンとかも、ふりがなの方にそのままカタカナで名前を入れても何とかなる。

これは知っとくと意外と便利だと思う。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL