テキストフィールドのある MySql テーブルがあります。
テキスト フィールドには、次のようなランダムなシーケンスが入力されます (任意の整数値を指定できます):
14,4,24,20,34,2
34,67,4,98,64
文字列 (テキスト フィールド値) の先頭または末尾にコンマはありません。
たとえば、「4」だけの合計出現数をカウントしたいとします。
これら 2 つの行をクエリすると、7 ではなく 2 が返されるはずです。
このようなクエリの書き方がわかりません。
###ありがとう###
MySQL 8.X
の場合REGEXP_REPLACE
を使用して 4 を見つけ、文字列からそれらを削除し、長さの差を計算できます。 リーリーリーリー
AS
正規表現の説明を使用してこれらの値の名前を変更することもできます。
(?<=^|,)4(?=$|,)
は、次の条件を満たす「4」を探しています:
カンマまたは文字列の先頭の前-
カンマまたは文字列の末尾の後-
MySQL の古いバージョンの場合リーリー
まず、出現するすべての「4」をアンダースコア (__
なぜこれほど多くの) に置き換えます (例: 54 の 4 は置き換えません)。 次に、アンダースコアを含む文字列の長さから、アンダースコアのない文字列の長さを引いた値が計算されます。これが、リスト内の「4」の数になります。
REPLACE
クエリをテストしているときに、MySQL のを使用するのでしょうか?
REPLACE
関数が予想とは異なる動作をすることがわかりました。この例を取り上げます:
4,4,4,4,4では、単一の Replace が使用された場合、
_,_,_,_,__が返されることが期待されます。ただし、カンマはその場で置き換えられ、カンマが 2 回「一致」した場合、2 回目はカウントされません。そのため、2
REPLACE(..., ",4,", ",_ , ")の理由。