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

SQL で列のデータを複数の行に分割するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-05 07:03:42
オリジナル
385 人が閲覧しました

How to Split a Column's Data into Multiple Rows in SQL?

SQL で列データを行に分割する方法

リレーショナル データベースを使用する場合、データを分割する必要がある状況が発生することがあります。単一列のデータを複数の行に分割します。この手法は、項目のカンマ区切りリストを個々の行に分割するなどのシナリオに特に役立ちます。

これを実現するには、SQL の文字列操作関数の機能を活用できます。列データを行に分割する 2 つの方法を見てみましょう:

1。分割関数の使用:

カスタム分割関数を作成して、カンマやセミコロンなどの特定の区切り文字に基づいて列データを分割できます。使用できるサンプル関数を次に示します。

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT
    DECLARE @slice VARCHAR(8000)

    SELECT @idx = 1
    IF LEN(@String)<1 OR @String IS NULL RETURN

    WHILE @idx!= 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)
        IF @idx!=0
            SET @slice = LEFT(@String,@idx - 1)
        ELSE
            SET @slice = @String

        IF(LEN(@slice)>0)
            INSERT INTO @temptable(Items) VALUES(@slice)

        SET @String = RIGHT(@String,LEN(@String) - @idx)
        IF LEN(@String) = 0 BREAK
    END

    RETURN
END;
ログイン後にコピー

2.再帰 CTE の使用:

または、再帰共通テーブル式 (CTE) を使用して同じ結果を得ることができます。 CTE ソリューションは次のとおりです:

WITH cte (code, DeclarationItem, Declaration) AS
(
  SELECT Code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
         STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM yourtable
  UNION ALL
  SELECT code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
    STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM cte
  WHERE Declaration > ''
)
SELECT code, DeclarationItem
FROM cte
ログイン後にコピー

使用例:

「yourtable」テーブルの列「Declaration」を個々の行に分割するには、次のいずれかを使用できます。上記の方法のうち。例:

SELECT t1.code, s.items AS declaration
FROM yourtable t1
OUTER APPLY dbo.split(t1.declaration, ',') s
ログイン後にコピー

このクエリは、「宣言」列が項目ごとに別々の行に分割された結果を生成します。

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

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