7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

7
10
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
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?