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

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

Patricia Arquette
リリース: 2025-01-03 18:33:43
オリジナル
284 人が閲覧しました

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

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

SQL 列に区切り文字で区切られたデータが含まれる状況では、抽出する必要がある場合があります。値を複数の行にフォーマットします。このタスクは、大量のデータや非常に長い区切り文字列を扱う場合に特に困難になります。

次の例を考えてみましょう:

ソース テーブル

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected];[email protected];[email protected]

希望出力

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]

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;
ログイン後にコピー

SQL Server 2016 より前では、カスタム分割関数は次のとおりです。 created:

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
ログイン後にコピー

split 関数を使用すると、データを抽出できますおよびフォーマット済み:

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート