Azure Synapase Analytics 専用SQLプールはAzure上で提供されているDWH用途のRDBMSのPaaSサービスです。SQL Serverと高い互換性がありますが、一方で一部SQL構文が使えない場合があります。
今回は指定した区切り文字で、文字列からテーブルを生成するSTRING_SPLIT
関数を紹介します。当該関数はSQL Serverで「互換性レベル 130」以上で利用することが出来ますが、Azure Synapase Analytics 専用SQLプールでも利用可能です。
使ってみると大変便利でしたので、こちらで紹介します。
用途
指定した特定の区切り文字で、文字列からテーブルを生成することが出来ます。
例えばカラム区切りの文字列から、value
と言うカラムを1つもつテーブル型を返してくれます。
使い方
STRING_SPLIT ( [ 文字列 ] , [ 区切り文字 ] )
STRING_SPLITは、第一引数の文字列を、第二引数で指定した区切り文字で分割して、結果をテーブルとして返してくれる関数です。
区切り文字は1文字で指定します。
文字列AA,BBBB,CC,D
と言う文字列をカンマでスプリット
SELECT * FROM STRING_SPLIT('AA,BBBB,CC,D', ',');
備考
APPLYオペレーター(CROSS APPLY
、OUTER APPLY
)と併用するとさらに便利そうです。
--テーブルの作成
create table split_test1(col1 nvarchar(100));
--データの挿入
insert into split_test1 values(1,'AA,BBBB,CC,D');
insert into split_test1 values(2,'11,222,3333,1234');
--id=1のcol1のデータをスプリット(エラーとなる)
SELECT value from STRING_SPLIT(split_test1.col1, ',') where id = 1;
--CROSS APPLYを使って、id=1のcol1のデータをスプリット(成功する)
SELECT value from split_test1 CROSS APPLY STRING_SPLIT(split_test1.col1, ',')
where id = 1;
--CROSS APPLYを使って、id=2のcol1のデータをスプリット(成功する)
SELECT value from split_test1 CROSS APPLY STRING_SPLIT(split_test1.col1, ',')
where id = 2;