SQLServer の 2016 以降のバージョンでは指定した文字で文字列を分解する STRING_SPLIT 関数が用意されています。
これを使えば簡単に CSV ファイルも作成することができます。
それ以前のバージョンでは存在しなかったので、自作していました。
SQLServerでSplit関数のようにカンマ区切りの文字列を分割して取得する方法
SQLServer2016以前のバージョンでは指定した文字で文字列を分割する「split」関数が実装されていません。(SQLServer2016以降ではSTRING_SPLIT関数が用意されています。それ以前のバージョンのSQLServerのためにSTRING_SPLIT関数を実装してみました。
この記事では STRING_SPLIT について解説します。
STRING_SPLITの使い方
STRING_SPLIT を使うには以下のルールを守る必要があります。
- SELECT 句のカラム名は value になる
それ以外は大きな制約はありません。
では早速、使い方です。
SELECT value AS 名前 FROM STRING_SPLIT( 'taro,jiro,hanako,yoshiko' , ',' )
上記の例では文字列を「,(カンマ)」で区切って取得しています。
実行結果は
名前 taro jiro hanako yoshiko
になります。
STRING_SPLITの戻り値はIN句でも使える
STRING_SPLIT の戻り値は WHERE 文の IN 句でも使うことができます。
--テーブルとデータの準備 CREATE TABLE test_table( name VARCHAR(20) ,age INT ) INSERT INTO test_table VALUES ( 'taro', 20 ) INSERT INTO test_table VALUES ( 'jiro', 30 ) INSERT INTO test_table VALUES ( 'hanako', 40 ) INSERT INTO test_table VALUES ( 'yoshiko', 50 ) --STRING_SPLITの戻り値をIN句に設定 SELECT * FROM test_table WHERE name in ( SELECT value FROM STRING_SPLIT( 'taro,hanako,saburo' , ',' )) --テーブルを消す DROP TABLE test_table
上記の実行結果は STRING_SPLIT で分解された文字列で IN 句の条件が生成されていることがわかります。
name age taro 20 hanako 40
まとめ
SQLServer2016 以降では指定された文字で文字列を分解して取得するには STRING_SPLIT を使えば簡単に行うことができます。
ただし、取得される SELECT 文のカラム名は value に固定されています。
これを使えば簡単に CSV ファイルも作成することができます。