ホームページ  >  に質問  >  本文

mysqlテキストフィールドの完全一致数を取得する

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

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

14,4,24,20,34,2

34,67,4,98,64

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

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

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

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

###ありがとう###
P粉493534105P粉493534105406日前636

全員に返信(1)返信します

  • P粉807471604

    P粉8074716042023-09-10 00:31:48

    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
  • キャンセル返事