3

既存のデータベースには「dependent_ages」というフィールド呼び出しが含まれており、一部のサンプルデータは「1,2,5」または「1yoand3mo」または「4mo」のようになります。

要件は、そのような文字列を整数に変換することです。整数は、「、」または「and」で区切られた部分文字列の数です。より正確には、セパレータは正規表現 "、| \ sand\s"として記述できます。したがって、上記の例では、変換された整数は3、2、および1です。基本的に、これらの一致のではなく、一致がいくつ存在するに関心があります。したがって、個々の値が「14yo」または「4mo」であっても、1としてカウントされます。

問題は、これを実行できるMySQL式を見つけることです。たとえば

SELECT REGEXMATCHES(dependent_ages) as dependent_no ...

UPADTE

いくつかの回答/コメントは、質問の一般的な誤解を示しているので、質問を明確にしました。

4

3 に答える 3

1

MySQLの文字列関数正規表現のドキュメントに基づくと、正規表現の比較を使用してtrue(1)またはfalse(0)を返す以外のことはできないと思います。一致を返すことはできず、一致の数を返すこともできません。正規表現を使用して置換を実行することさえできないと思います。

ストアドプログラムを使用できる場合があります:

  • で始まります:'son: 10yr * daughter: 5yr * son:6mo'
  • 最初のパス:"*"文字列内のすべてを""==>に置き換えます'son: 10yr daughter: 5yr son:6mo'
  • "*"2番目のパス:数字のシーケンスを(に"15"なります"*")==>に置き換えます'son: *yr daughter: *yr son:*mo'
  • 3番目のパス:non-"*"""==>に置き換えます'***'
  • 4番目のパス:文字列の長さを返します(3)。

多数のレコードの場合は遅くて面倒ですが、MySQL内にとどまります。また、別のツールを使用して行をダウンロードし、処理を行ってから、結果をアップロードすることを検討することもできます。

于 2013-03-01T14:09:00.507 に答える
0

私があなたを正しく理解していれば、これはあなたが必要とするものです。

select count(*) from `table` where `dependent_ages` rlike 'HERE-REGEX'
于 2013-02-28T22:09:55.333 に答える
0

次のようなものが必要だと思います:

SELECT
  col,
  CASE WHEN COALESCE(col, '')='' THEN 0
  ELSE
    length(col)-length(replace(col, ',', ''))+
    (length(col)-length(replace(col, ' and ', ''))) DIV 5
    +1
  END
FROM
  yourtable

ここでフィドルを参照してください。

于 2013-02-28T22:17:50.763 に答える