見出し画像

【他力本願】SQLで文字列の出現回数を調べる

(1)住所表記のゆれに悩まされる

様々なシステムからのデータをDr.Sumにインポートする中での永遠の課題「システムによって住所表記が異なる」。私のDr.Sum環境では緯度経度データを住所文字列(建物単位)に紐付いてもっており、できるだけ住所を決まった形式に整える必要があるけど、システムごとに揺れまくりがちなのが住所表記。炸裂する各システムの自由っぷりは、どうぞ以下の例をご覧下さい。

(例)いっちょうめ いちばん いちごう
→広島市中区基町1-1-1
→広島市中区基町1丁目1-1
→広島市中区基町一丁目1-1
→広島市中区基町1丁目1-1
⇒上記はすべて「広島市中区基町1丁目1-1」の形式にしたい

これ以外にも棟や部屋番号など、各システム自由に作られており、精度100%にするのはもうあきらめているが、それでも出来るだけよくしたいのが人情。

(2)SQLでハイフンの数を数えたい

あるシステムでは、同一システム内で「広島市中区基町1-1-1」「広島市中区基町1丁目1-1」が入り交じっていた。なんでなん。どういう作りなの。担当者は一歩前に出よ私の目を見て説明しろとか思ったりするんだけど、まぁ実際は何かやむにやまれぬ理由があったのかもしれない。移行時に古いデータを綺麗に出来なかったとか。

で、とりあえず、ハイフンが2つあるやつ(例:1-2-3)を機械的に1丁目2-3に置き換えてみて、精度がどれくらい上がるか確認してみるか、と思った時です。

「SQLでハイフンの出現回数ってどうやって取得しようか?」

ちょっと考えただけでもめんどくさそうだったので、何か良い方法ないかしら?とググりました。そして知ったのです、このような便利な技を。
知らなかった!!!のちの自分のために記録しておかねば。というのがこの投稿の趣旨です。

上記サイトから引用↓ 

全体文字数から、キーワードを削除した後の文字数を引いて、キーワードの文字数で割れば、出現回数になるんですね。

/*
* [MySQL]テーブルtblのカラムcolから、キーワード '自転車' の出現回数を得る
*/
SET @keyword:='自転車'
SELECT (LENGTH(col) - LENGTH(REPLACE(col, @keyword, '')))
/ LENGTH(@keyword) AS CNT FROM tbl

知らなかった!すごいと心の中で叫びました。
もうちょっとでめんどくさいロジックを組むところでしたよ。
このSQLのおかげでかなり楽にできました。

以上

この記事が気に入ったらサポートをしてみませんか?