SQLServerのSTRING_SPLITで指定した文字で文字列を分解する方法

記事内に広告が含まれています。

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 ファイルも作成することができます。

タイトルとURLをコピーしました