SQL ServerでJSON文字列を含むカラムがある場合、ISJSON関数でJSON文字列かどうか判断でき、OPENJSON関数でJSON文字列を行分割することができる。
今回は、ISJSON関数やOPENJSON関数でJSON文字列を別行に分割してみたので、その手順を共有する。
前提条件
下記記事の「前提条件」の内容が完了していること。
Spring BootでSQL Serverに接続しMyBatisを利用してみた今回は、Spring Bootアプリケーションで接続するデータベースをSQL Serverに変更してみたので、そのサンプルプログラムを共...
JSON文字列の行分割操作
JSON文字列の行分割操作を行った結果は、以下の通り。
1) 以下のデータがある状態からスタートする。
SELECT * FROM user_data ORDER BY id ASC

なお、都道府県コードは、以下のサイトに記載の値と同じにしている。
https://webuip.nii.ac.jp/webuip/ill-map-jis.html
2) 以下のように、ISJSON関数の戻り値=1であるレコードを取得すると、memoがJSON文字列であるデータのみを抽出できる。
SELECT * FROM user_data WHERE ISJSON(memo) = 1 ORDER BY id ASC

3) 以下のように、OPENJSON関数を利用すると、memoのJSON文字列(code, name)毎に別行に分割することができる。
SELECT u.id, u.name, memo_json.code, memo_json.name
FROM user_data u
CROSS APPLY OPENJSON(u.memo) WITH (
code VARCHAR(2)
, name NVARCHAR(10)
) memo_json
WHERE ISJSON(u.memo) = 1
4) 以下のように、3)で抽出された結果に抽出条件を、WHERE句に追加することもできる。
SELECT u.id, u.name, memo_json.code, memo_json.name
FROM user_data u
CROSS APPLY OPENJSON(u.memo) WITH (
code VARCHAR(2)
, name NVARCHAR(10)
) memo_json
WHERE ISJSON(u.memo) = 1
AND memo_json.name = '東京'
要点まとめ
- SQL ServerでJSON文字列を含むカラムがある場合、ISJSON関数でJSON文字列かどうか判断でき、OPENJSON関数でJSON文字列を行分割することができる。





