ホームページ > データベース > mysql チュートリアル > SQL 列の区切り文字で区切られた値を複数の行に分割するにはどうすればよいですか?

SQL 列の区切り文字で区切られた値を複数の行に分割するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-04 11:43:35
オリジナル
679 人が閲覧しました

How Can I Split Delimited Values in a SQL Column into Multiple Rows?

SQL 列の区切り文字で区切られた値を複数の行に分割する

SQL 列の区切り文字により、値を複数の行に分割しようとするときに問題が発生する可能性があります行。この記事では、SQL Server の最新バージョンとレガシー バージョンの両方に対する解決策を説明します。

SQL Server 2016 および新しい

SQL Server 2016 では STRING_SPLIT 関数が導入されており、簡単に以下を使用した値の分離構文:

SELECT s.[message-id], f.value
FROM dbo.SourceData AS s
CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;
ログイン後にコピー

2016 より前の SQL Server バージョン

古いバージョンの SQL Server の場合は、次のような分割関数を作成します。

CREATE FUNCTION dbo.SplitStrings
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, 
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO
ログイン後にコピー

分割関数を作成したら、それを使用して抽出できます値:

SELECT s.[message-id], f.Item
FROM dbo.SourceData AS s
CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;
ログイン後にコピー

ヒント:

最適なストレージと参照を実現するには、角括弧で囲む必要があるため、列名にダッシュを使用しないでください。

以上がSQL 列の区切り文字で区切られた値を複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート