방명록
- SQL Server 2016 - JSON parser2017년 06월 01일 18시 01분 50초에 업로드 된 글입니다.작성자: DE 군고구마반응형
SQL Server 2016 부터 JSON 형태를 파싱하는 쿼리를 지원합니다.
Step 1 - 테이블 생성
- JSON 형태의 문자들을 넣어줄 컬럼이 있는 테이블을 하나 생성 합니다.
create table JSON_table ( seq int identity(1,1) ,reg_date datetime ,JSON nvarchar(1000) ) go
Step 2 - JSON 형태 데이터 넣기
- 제가 임의로 만든 JSON형태의 데이터를 1건 넣어 보겠습니다.
insert into JSON_table (reg_date,JSON) values (getdate(), '{"UserLevel":1,"Item":[{"id":20030,"type":2,"count":2},{"id":20024,"type":3,"count":4}],"Money":{"Type":1,"value":1000},"Change":2}')
- 아래와 같이 JSON 이라는 컬럼에 정상으로 들어가 있습니다.
Step 3 - 파싱
- 파싱 쿼리는 간단합니다. 다음과 같이 원하는 곳을 지정해 주면 됩니다.
* 여기서 JSON 명렁어를 치고, UserLevel과 같은 이름을 정의할때 대소문자를 구분해줘야 합니다.
select seq ,reg_date ,JSON_VALUE(JSON,'$.UserLevel') as UserLevel from JSON_table
- 아래와 같은 결과를 받을 수 있습니다.
- 다음과 같이 JSON에서 해당 부분을 불러왔습니다.
여기서 가장 바깥 쪽에 { } 는 저런식으로 얼마든지 뽑을 수 있습니다. 마찬가지로 Change도 뽑을 수 있습니다.
하지만, [ ] 에 존재하는{ } 는 다른 형태로 파싱해야 합니다. 다음과 같은 형태로 할 수 있습니다. (용어를 잘 몰라서 기호로 써놨습니다.)
Step 4
- 이부분은 지정만 해주면 간단합니다.
select seq ,reg_date ,JSON_VALUE(JSON,'$.UserLevel') as UserLevel ,JSON_VALUE(JSON,'$.Item[1].id') as Item_id from JSON_table
- 다음과 같은 JSON에서 해당 부분을 불러왔습니다.
이 부분을 다음과 같이 그림으로 보면 좀 편할거 같습니다.
감사합니다.
반응형'Database > MSSQL Server' 카테고리의 다른 글
[MSSQL] BEGIN ... END (0) 2023.12.12 The data types xml and nvarchar are incompatible in the add operator. (0) 2018.03.14 Partition Truncate Table (0) 2017.04.14 Alwayson Automatic synchronization Login(Alwayson 로그인 자동 동기화) ② (0) 2016.08.25 DbMgrPartnerCommitPolicy::SetSyncState (0) 2016.08.11 다음글이 없습니다.이전글이 없습니다.댓글