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に接続して、調査するときなどに使って下さい。
というか何か他にいい方法あったら教えて下さい。