mysqlテキストフィールドの完全一致数を取得する
P粉493534105
P粉493534105 2023-09-09 10:37:09
0
1
698

テキストフィールドのある MySql テーブルがあります。

テキスト フィールドには、次のようなランダムなシーケンスが入力されます (任意の整数値を指定できます):

14,4,24,20,34,2

34,67,4,98,64

文字列 (テキスト フィールド値) の先頭または末尾にコンマはありません。

たとえば、「4」だけの合計出現数をカウントしたいとします。

これら 2 つの行をクエリすると、7 ではなく 2 が返されるはずです。

このようなクエリの書き方がわかりません。

###ありがとう###
P粉493534105
P粉493534105

全員に返信(1)
P粉807471604

MySQL 8.X

の場合

REGEXP_REPLACE を使用して 4 を見つけ、文字列からそれらを削除し、長さの差を計算できます。 リーリー

これにより、各行の「4」の数が返され、それらをすべて合計することができます:

リーリー

AS を使用してこれらの値の名前を変更することもできます。

正規表現の説明

(?<=^|,)4(?=$|,) は、次の条件を満たす「4」を探しています:

    カンマまたは文字列の先頭の前
  • カンマまたは文字列の末尾の後
MySQL の古いバージョンの場合

このクエリは非常に見苦しいですが、これを使用できます:

リーリー

まず、出現するすべての「4」をアンダースコア (

__) に置き換えます (例: 54 の 4 は置き換えません)。 次に、アンダースコアを含む文字列の長さから、アンダースコアのない文字列の長さを引いた値が計算されます。これが、リスト内の「4」の数になります。

なぜこれほど多くの

REPLACE を使用するのでしょうか?

クエリをテストしているときに、MySQL の

REPLACE 関数が予想とは異なる動作をすることがわかりました。この例を取り上げます: 4,4,4,4,4 では、単一の Replace が使用された場合、_,_,_,_,__ が返されることが期待されます。ただし、カンマはその場で置き換えられ、カンマが 2 回「一致」した場合、2 回目はカウントされません。そのため、2 REPLACE(..., ",4,", ",_ , ")の理由。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート