2011-08-18 1 views
0

に一致I内部このデータを用いてカラムVARCHAR [25]を有する:のMySQL REGEXP正数

  • 886、-886
  • -886
  • 0、-1234
  • を(空)

数字サイズが1桁からn桁に変わる可能性があります。 と私は

REGEXP '[^-,][0-9]+' 

のようなものが、これは-886 88のようにマッチする正規表現

+1

ない私は前にこのことについて考えていなかった理由を確認してください: '、NOT LIKE '% - %が'' – Fabrizio

答えて

1
を引っ張ることを考えていたことに

を少なくとも一つの正の数を持っている任意の行を引っ張るできるようにする必要があります

おそらく、正規表現は

COL not like '-%' AND COL not like '%,-%' 

しかし、これは間違ったデータ型に格納する悪い例である必要はありません
,を分割して複数の行に保存...そして、あなたはこの質問

+0

この列は 'でも含めることができます0,1,2,3,4,5,6,7,8,9,10,11、-0,1,2,3,4 'となり、複数の列は機能しません。この列の99%には0が含まれているため、別の表はコードの他の部分を複雑にします。 – Fabrizio

+1

@Fabrizio: 'GROUP_CONCAT()'を持つビューはオプションです。 –

+0

あなたの投稿は解決策ではありませんが、それは私に役立ちました: 'NOT LIKE '% - %''は、文字列に負の数が含まれているかどうかを確認する非常に簡単な方法です「すべて、-886」、「886、-886」のような言葉 – Fabrizio

0

のようなものを処理するためのいくつかの時間を節約することができ:<::>:部分は単語の境界を示す

REGEXP '[[:<:]][^-,][0-9]+[[:>:]]' 

を試してみてください。

+0

興味深い、それらを忘れてしまった。それを試してみる – Fabrizio

+0

REGEXP [[:<:]] [^ - ] [0-9] + [[:>:]] ''私は数字が単語境界だと思う。それは期待どおりに動作しません – Fabrizio

0

^\ b \ d + \ b $ は正の整数を与えます。

^[^ - ] \ dは+((([^ - ] \ dは+))?)+ $ はあなたにすべての値が正の整数いずれかのリストについては

があるだけのリストを与えます(ただし、すべての正の整数は負または正である)これはチェックアウトすると思います: ^(( - \ d +、)?)+ [^ - ] \ d +((^ - )\ d +)) (、 - \ D +))+ $

はここで正規表現のための素晴らしいサイトです: http://gskinner.com/RegExr/

私はすべての時間のライブテストのためにそれを使用するには?。これを使用して

+0

\ dはMySQLで動作しません、[0-9]を使用する必要があります – Fabrizio

1

私は最善の解決策を見つけ出すことができました:

    :私は列ものような言葉が含まれている可能性があることを言及するのを忘れてしまった

    `COL` NOT LIKE '%-%' 
    

  • 全て、-886
  • なし、886
  • ,0,1 、2,3、なし
  • 等...