LoginSignup
0
0

More than 1 year has passed since last update.

【SQL】指定した区切り文字で、文字列からテーブルを生成する

Posted at

Azure Synapase Analytics 専用SQLプールはAzure上で提供されているDWH用途のRDBMSのPaaSサービスです。SQL Serverと高い互換性がありますが、一方で一部SQL構文が使えない場合があります。

今回は指定した区切り文字で、文字列からテーブルを生成するSTRING_SPLIT関数を紹介します。当該関数はSQL Serverで「互換性レベル 130」以上で利用することが出来ますが、Azure Synapase Analytics 専用SQLプールでも利用可能です。

使ってみると大変便利でしたので、こちらで紹介します。

用途

指定した特定の区切り文字で、文字列からテーブルを生成することが出来ます。

例えばカラム区切りの文字列から、valueと言うカラムを1つもつテーブル型を返してくれます。

こんなイメージです。
image.png

使い方

STRING_SPLIT ( [ 文字列 ] , [ 区切り文字 ] )
STRING_SPLITは、第一引数の文字列を、第二引数で指定した区切り文字で分割して、結果をテーブルとして返してくれる関数です。
区切り文字は1文字で指定します。

文字列AA,BBBB,CC,Dと言う文字列をカンマでスプリット

SELECT * FROM STRING_SPLIT('AA,BBBB,CC,D', ',');

結果
image.png

備考

APPLYオペレーター(CROSS APPLYOUTER 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;

id=1の結果
image.png

id=2の結果
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0