完全な正規表現機能セットを使用する効率的なクエリを作成することは可能ですか?
そうでない場合、マイクロソフトは本当にその機能を検討する必要があります。
完全な正規表現機能セットを使用する効率的なクエリを作成することは可能ですか?
そうでない場合、マイクロソフトは本当にその機能を検討する必要があります。
SQL Server 2000 (および SQL Server のその他の 32 ビット エディション) にはxp_pcreがあり、Perl 互換の正規表現を一連の拡張ストアド プロシージャとして導入します。私はそれを使用しました、それは動作します。
最近のバージョンでは、 .NET に統合された正規表現に直接アクセスできます(このリンクは無効になっているようです。別のリンク: MSDN: How to: Work with CLR Database Objects )。
答えはノーです。一般的なケースではありませんが、効率的とはどういう意味かにもよるかもしれません。これらの目的のために、次の定義を使用します。「適切な順序でインデックスと結合を効果的に使用する」は、おそらくどの定義よりも優れています。
この場合、「効率的な」クエリは「s-arg」可能です。つまり、インデックス ルックアップを使用して検索述語を絞り込むことができます。等式 (t 結合) と単純な不等式でこれを行うことができます。「AND」述語もこれを行うことができます。その後、テーブル、インデックス、および範囲のスキャン、つまりレコードごと (またはインデックス キーごとのインデックス キー) の比較を行う操作について説明します。
Sontek の回答では、正規表現機能をクエリにインライン化する方法について説明していますが、操作ではレコードごとに比較を行う必要があります。それを関数にまとめると、関数ベースのインデックスが可能になり、計算の結果がインデックスで具体化されます (Oracle はこれをサポートしており、この記事で説明されている種類のトリックを使用して、SQL Server で同等の機能を得ることができます)。ただし、任意の正規表現に対してこれを行うことはできません。
一般的なケースでは、正規表現のセマンティクスは、インデックスのような方法で一致セットをプルーニングするのに適していないため、rexegp サポートをクエリ オプティマイザーに統合することはおそらく不可能です。
アドホッククエリ用にSQLServerで正規表現をネイティブに呼び出し、ストアドプロシージャで使用できるようにしたいと考えています。私たちのDBAではCLR関数を作成できないので、私はLINQPadをアドホックなもののための一種の貧乏人のクエリエディターとして使用してきました。これは、データベースに保存されているJSONやXMLなどの構造化データを操作する場合に特に便利です。
また、正規表現のサポートがないことは見落としのように思われることに同意します。これは、クエリ言語の明らかな機能のようです。将来のバージョンで見られることを願っていますが、人々は長い間それを求めてきており、まだ製品に組み込まれていません。
私がそれに対して見た最も頻繁な理由は、不十分な形式の式が壊滅的なバックトラックを引き起こす可能性があり、.NETでは中断せず、ほとんどの場合、マシンを再起動する必要があることです。たぶん、彼らがフレームワークでそれに対処すると、SQLServerの将来のバージョンに含まれるようになるでしょう。
SQL Server 2008の新しいタイプ(階層、地理空間)から、Microsoftがこれを追加すると、SQLCLRアセンブリの形式で提供されることがわかると思います。
アセンブリをデータベースにインストールできる場合は、VisualStudioで新しいDatabase\ SQL Serverプロジェクトを作成して、独自のアセンブリを作成できます。これにより、新しいトリガー/UDF/ストアドプロシージャ/集計またはUDTを作成できます。System.Text.RegularExpressionsをクラスにインポートして、そこから移動できます。
お役に立てれば