sql >> データベース >  >> RDS >> Sqlserver

SQLServerでカンマ区切りのリストを行に変換する方法

    したがって、コンマで区切られたリストがあり、それをデータベースに挿入する必要があります。ただし、リスト内の各値を独自のテーブル行に挿入する必要があります。したがって、基本的には、リストを個別の値に分割してから、それらの値のそれぞれを新しい行に挿入する必要があります。

    T-SQLにSTRING_SPLIT()が追加されました このタイプの操作を簡単にする機能。この関数はSQLServer2016で最初に使用可能になり、互換性レベルが130以上のデータベースで使用できます(データベースの互換性レベルを確認する方法と変更する方法)。

    次のカンマ区切りのリストがあるとします。

    Cat,Dog,Rabbit

    STRING_SPLIT()を使用できます 各値を独自の行に分割する関数。このように:

    SELECT value 
    FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

    結果:

    value 
    ------
    Cat   
    Dog   
    Rabbit
    

    ですから、私たちはすでに中途半端です。実際、要件によっては、これで十分な場合もあります。

    値をテーブルに挿入

    上記のコードを取得して、INSERT()で使用できます。 声明。つまり、これらの値をテーブルに挿入すると、各リストアイテムが独自の行に配置されます。これを行うには、前のコードの前にINSERT()を付けるだけです。 ステートメント。

    例:

    INSERT INTO Animals (AnimalName)
    SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

    これにより、各値がAnimalNameの独自の行に挿入されます。 Animalsの列 テーブル。

    結果を確認する

    結果を確認するには、SELECTを実行します テーブルに対するステートメント:

    SELECT * 
    FROM Animals;

    結果:

    AnimalId  AnimalName
    --------  ----------
    1         Cat       
    2         Dog       
    3         Rabbit    
    

    この結果は、AnimalIdが 列はIDENTITY 列(増分値は新しい行ごとに自動的に挿入されます)。

    完全なスクリプト

    上記の例を一度に実行できるスクリプトを次に示します。データベースを作成し、テーブルを作成し、データを挿入してから、結果を確認します。

    データベースを作成します:

    /* Create database */
    USE master;
    CREATE DATABASE Nature;
    

    残りを行う:

    /* Create table */
    USE Nature;
    CREATE TABLE Animals (
      AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      AnimalName nvarchar(255) NOT NULL
    );
    
    /* Insert data from the list */
    INSERT INTO Animals (AnimalName)
    SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
    
    /* Check the result */
    SELECT * FROM Animals;
    

    1. PLSQL Anonymousブロックが完了したときに出力がないのはなぜですか?

    2. sqliteは2MBを超えるフィールドを取得します

    3. org.hibernate.internal.util.config.ConfigurationException:cfg.xmlリソースが見つかりませんでした[/HibernateTest/src/hibernate.cfg.xml]

    4. OracleSQLステートメントでの値のコンマ区切りリストの作成