2016-10-05 5 views
0

MSSQLの正規表現を検索して、特定の単語で始まる値を省略します。 。例えばのために、式は「ミスター」で始まる任意の文字列を無視するが、「MMR」や場所「ミスター」は、文字列の途中のどこかにあるで始まる任意の文字列引く必要があります。特定の単語で始まらない文字列を見つけるSQL Regex

サンプルデータ:

は省略する必要があります。 'マーフィーバレラ7329 Neque道路ジーリックジーM15 6SFトンガ'

を省略してはいけません: 'マーフィーバレラ7329 Neque道路ジーリックジーM15 6SF トンガ'

私はLIKE '[^Mr.]'を使用しましたが、それはM OR Rで始まるすべてを省略しているので、そのトリックはしていません。

私はチェックする必要があるそのような単語のリストを持っています(例えば、Ms、Dr、St etc)。正規表現を微調整する方法を教えてください。

ありがとうございます!そこにも良いの見積もりによる

+0

[]はそれらの間の文字の1つを示しているので、[^ Mr]はMまたはrになりません。 () –

+0

こんにちは@Michalを使用してみてください、私もそれを試してみましたが、これらもうまくいきません。 –

+1

SQL Serverには正規表現がありません。受け入れ可能なパフォーマンスが必要な場合は、おそらく全文検索を使用するべきですが、最善の解決策は読み込み中にプレフィックスを抽出することです。 C#プログラムやテーブルにデータをロードするSSISフローでRegexを使用する方がはるかに簡単です。 –

答えて

1

を読ん

string not like 'mr%'

Mrで始まるクエリは無視されます。

+2

ありがとう@Tarlan、時には心はそれを完全に無視するほど複雑にしようとします物事を行う簡単な方法があるかもしれないという事実!私がそれを実現するようにしてくれてありがとう、私はちょうど今すぐ簡単な修正としてあなたの提案を使用しました。おそらく後で、クエリをより効率的にするために、私はcontains節を使用します。 –

1
(string like 'mmr%' or string like '%mr%') and string not like 'mr%' 

Query using total wild cards can also use statistics、文字列は

、その後、長い80文字を超える場合、唯一

文字列の長さの合計1.Ifは80文字未満

です

最初と最後の40文字が文字列から抽出され、文字列サマリーの作成時に文字列を検討する前に連結されます。したがって、文字列の無視された部分にのみ現れる部分文字列の正確な頻度見積もりは利用できません

私はチェックする必要があるそのような単語のリストを持っています(例えば、Ms、Dr、Stなど) search.Toが知っているあなたは私がフルテキストを使用することをお勧め正規表現

を微調整する方法を知っているD要求は、なぜ、なぜあなただ​​け使用していない以下の

Performance of like '%Query%' vs full text search CONTAINS query

+1

このようなクエリのパフォーマンスは、すべてのレコードを処理する必要があるため、恐ろしいことになります。 –

+0

ありがとう@TheGameiswar、これは参考になります。私は140文字のフィールドの200k行だけを見なければならないが、より良いことをする方法を知ることは常に良いことだ! –

+0

@TheGameiswar @Panagiotis:プラス私は実際に次のようなものの後に実際には、私はこのために完全なテキスト検索のクエリを使用することができるとは思わない: '(T.BeneAddress LIKE M.MatchIdentifier + '[^ A- Za-z0-9]% 'とT.BeneAddressは' Mr% 'のようではなく、T.BeneAddressは' Ms% 'と似ていません) ' - _ MatchIdentifierで始まり特殊文字で終わる単語(つまり、国の一致識別子はAddrのstrtにあります)。しかし、Mauritiana/'MS'のための 'MR'である国の一致識別子があるので誤認を避けるためにMr/Msで始まっていません。Montserrat etc_ –

関連する問題