ホームページ >データベース >mysql チュートリアル >master..spt_values が SQL Server でカンマ区切り値を効率的に分割するにはどうすればよいですか?

master..spt_values が SQL Server でカンマ区切り値を効率的に分割するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-30 14:20:11590ブラウズ

How Can master..spt_values Efficiently Split Comma-Separated Values in SQL Server?

master..spt_values による列の分割

背景: ルックアップ テーブルとプロジェクション

Master..spt_values は Microsoft SQL Server のシステム テーブルです。システム ストアド プロシージャで使用されるさまざまなルックアップ テーブルと射影テーブルが含まれています。数値、ビットマスク、およびその他の一般的に必要な値の事前定義されたシーケンスを提供することで、効率的なデータ操作が可能になります。

ルックアップ テーブルを使用すると、ロック タイプを数値から名前に変換するなど、数値を対応する文字列表現に拡張できます。 。一方、射影テーブルは、値の範囲を反復処理する方法を提供し、列を複数の行に分割する場合に便利です。

Type = "P": Projection Table

master に「P」と入力します。spt_values は射影テーブルを示します。 これには、0 から 2047 までの一連の連続した数字が含まれています。このテーブルにより、カウントや集計など、さまざまな操作を通じて一連の値を効率的に投影します。

列分割にタイプ "P" を使用する利点

master..spt_values を使用する の利点CSV 列を分割するための (タイプ "P") は、そのパフォーマンスと効率にあります。 SQL Server は、事前に計算された数値シーケンスを利用することで、シーケンスが動的に生成された場合に必要となる一時テーブルの作成と挿入を回避できます。これにより、列分割操作を実行するクエリの実行速度が大幅に向上します。

コード例

問題のコードは、master..spt_values:

SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway
このコードは、master..spt_values の Type "P" テーブルを利用して、次のような一連の数値を作成します。 CSV 列 (col4) の各文字を表示します。次に、これらの数値を使用して、カンマ区切り文字に基づいて列を行に分割します。

以上がmaster..spt_values が SQL Server でカンマ区切り値を効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。