meal이라는 필드에
[{"set_cnt":1,"set_meal":[{"day_of_week":"thu","pid":"0000010010","pname":"애호박죽","pimg":자사몰페이지@@@,"al_matter":[""],"is_care":false,"qty":1,"group":"2023-02-2343010_10","start_group":true,"end_group":false,"max_qty":"1"}]},{"set_cnt":1,"set_meal":[{"day_of_week":"wed","pid":"0000010014","pname":"현미죽","pimg"자사몰페이지@@@"al_matter":[""],"is_care":false,"qty":1,"group":"2023-03-0134110_10","start_group":true,"end_group":false,"max_qty":"1"}]}]
이렇게 레코드가 들어가 있습니다.
여기서 추출하고 싶은 값은 아래와 같습니다.
"set_cnt": 뒤에 나오는 숫자 -> 1, 1
"pname": 뒤에 나오는 문자열 -> "애호박죽", "현미죽"
도대체 어떻게 쿼리문을 작성해야 위와 같이 집합형태의 레코드에서 제가 원하는 값만 추출할 수 있을까요?
(자사몰페이지@@@는 보안 상 임의로 바꿔넣은 문자열입니다.)
대략 필요한 정보 또는 구조만 남겨서 쿼리했어요.
mssql 2019 version입니다.
declare @meals nvarchar(max) = N'[{"set_cnt":1,"set_meal":[{"day_of_week":"thu","pid":"0000010010","pname":"애호박죽", "pimg":"","al_matter":[""]}]},
{"set_cnt":1,"set_meal":[{"day_of_week":"wed","pid":"0000010014","pname":"현미죽","pimg" : "자사몰페이지@@@", "al_matter":[""]}]}]'
select set_cnt, pname from openJson(@meals)
WITH (
set_cnt nvarchar(20) '$.set_cnt',
set_meal nvarchar(max) '$.set_meal' as json
)
cross apply openjson(set_meal)
with (
pname nvarchar(100) '$.pname'
)