7

テーブルに挿入された不良データを見つけようとしています。おそらく誰かが Word からコピー/貼り付けを行い、データベースに挿入します。

特殊文字を含む行を見つけるためのクエリのような同様の質問を見てきました

しかし、これは私が必要としているものにはうまくいきません。基本的に、標準文字を含まないデータセットのみを返し、endash などをキャッチしたい (ほんの一例)。

私はこのようなものを使ってみました

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z \-@\.]%'

しかし、それはすべての単一のレコードを返します。


編集

後で来る他の誰かにとって有益な場合に備えて。最終的に私が抱えていた問題は、以下の sgmoore でも指摘されているように、ハイフン (-) 文字の配置が原因でした。これを、not (^) 文字の直後の範囲の先頭に移動しました。

また、LIKE が実際には正規表現を使用していないという gbn から提供された情報に基づいて、Microsoft のドキュメントSQL Server LIKE Statementを再確認しました。バックスラッシュ文字は正規表現と同じであると想定していたため、エスケープ文字として不必要に使用していました。これらは不要であり、明らかにエスケープ文字はワイルドカード文字でのみ必要です。私がリンクしたドキュメントでは、LIKE 範囲に続く ESCAPE 句を使用して、どの文字をエスケープ文字として使用するかを指定することについても言及しています。実際には 50% (50%, 150%) で終わる文字列に一致します。

以下は、私が電子メール データの悪い文字を選別するために最終的に使用したものです。私にとっては機能しますが、すべてのケースで完全ではない可能性があります。

SELECT * FROM mytable WHERE email LIKE '%[^-0-9a-zA-Z_@.]%'

また、役立つ場合は、他のいくつかの一般的なテキスト フィールドで同様のことを行う必要がありました。これは包括的とは言えませんが、結果セットをほんの一握りのレコードに絞り込み、探しているものを視覚的に判断することができました.

SELECT * from mytable WHERE text_field LIKE '%[^-0-9a-zA-Z @.''?:/,+&();_]%'

4

3 に答える 3

5

試す

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z @\.\-]%'

お使いのバージョンの - 記号の位置が問題を引き起こしているようです。

于 2013-04-03T16:46:39.840 に答える
1

二重否定を使用する

... WHERE email NOT LIKE '%[^0-9a-zA-Z ,-@\.]%'

サンプルデータも役に立ちます

于 2013-04-03T15:56:52.070 に答える
1

おそらく、すべてのメールに@.. あなたは試すことができます:

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z ,\]%'

元のリストが本当に必要なものである場合は、エスケープする必要があります-:

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z ,\-@\.]%'
于 2013-04-03T15:57:23.467 に答える