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

SQL で区切られた受信者アドレスを複数の行に分割するにはどうすればよいですか?

DDD
リリース: 2024-12-31 19:18:11
オリジナル
634 人が閲覧しました

How to Split Delimited Recipient Addresses in SQL into Multiple Rows?

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

問題の説明:
Exchange 2007 を挿入するときメッセージ追跡ログは SQL テーブルに記録され、受信者は区切り文字で区切られた受信者アドレスに記録されます。列には複数の値が含まれる場合があります。ユーザーは、元のメッセージ ID の関連付けを維持しながら、これらの値を別のテーブルの個別の行に分割したいと考えています。

解決策:

SQL Server 2016
新しい STRING_SPLIT の利用function:

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

SQL Server Pre-2016
カスタム分割関数の作成 dbo.SplitStrings:

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

データ操作:

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