MySQL

SQLで文字列が何個含まれるか調べる方法

More than 1 year has passed since last update.


SQLで文字列が何個含まれるか調べる方法


やりたいこと

テーブル hoge の カラム fuga 内に、

何個 foo という文字列が含まれているかを調べたい。


SQL

SET @keyword = 'foo';

SELECT
TRUNCATE((LENGTH(`fuga`) - LENGTH(REPLACE(`fuga`, @keyword, ''))) / LENGTH(@keyword), 0) as `cnt`
FROM `hoge`;


何をやってるか

『“fuga カラムに入ってる文字列”の文字数』から、

『“↑の文字列から foo を空文字に置換した文字列”の文字数』を

引いて

foo の文字数』で割って、

最後に小数点以下を切り捨ててます。(.0000 が鬱陶しかったので)


更に

SET @keyword = 'foo';

SELECT
TRUNCATE((LENGTH(`fuga`) - LENGTH(REPLACE(`fuga`, @keyword, ''))) / LENGTH(@keyword), 0) as `cnt`
FROM `hoge`
WHERE
`fuga` LIKE CONCAT('%', @keyword, '%')
;

みたいに 文字列が含まれるレコードを検索してやると、少しは早くなるかもしれない…。


最後に

ものすご~く遅いSQLなので、アプリ内で↑のSQLは叩かない方がいいと思う。

メンテナンス等で、直接DBに接続して、調査するときなどに使って下さい。

というか何か他にいい方法あったら教えて下さい。