728x90
반응형
최신 SSMS에서는 OPENJSON 함수를 사용하여, JSON String의 key와 값 추출이 가능하다.
OPENJSON을 제공하지 않는 구버전 SSMS는 아래 함수 만들어서 사용가능하다.
create FUNCTION [dbo].[fnGetJsonValue](@key varchar(100), @data nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @keyJson varchar(105) = '"' + @key+ '":'
DECLARE @keyIdx int = CHARINDEX(@keyJson, @data)
IF @keyIdx = 0 RETURN null
DECLARE @valueIdx int = @keyIdx + LEN(@keyJson)
DECLARE @termIdx int = CHARINDEX('"', @data, @valueIdx)
IF @termIdx <> 0 BEGIN
SET @valueIdx = @valueIdx + 1
SET @termIdx = CHARINDEX('"', @data, @valueIdx)
-- Overcome JSON qoute escape
WHILE SUBSTRING(@data, @termIdx-1, 1) = '\'
BEGIN
SET @termIdx = CHARINDEX('"', @data, @termIdx + 1)
END
END ELSE BEGIN
SET @termIdx = CHARINDEX(',', @data, @valueIdx)
IF @termIdx = 0 SET @termIdx = CHARINDEX('}', @data, @valueIdx)
END
IF @termIdx = 0 RETURN null
-- Replace escapte quote before return value
RETURN REPLACE(SUBSTRING(@data, @valueIdx, @termIdx - @valueIdx), '\"', '"')
END
728x90
반응형
'MSSQL' 카테고리의 다른 글
DB 암호화/복호화 (0) | 2021.09.08 |
---|---|
MSSQL] xmlParseCharRef: invalid xmlChar value 26 오류해결 (0) | 2020.12.03 |
MSSQL] 구분자로 문자열 split하여 Table로 변환하기 (0) | 2020.10.15 |
MSSQL] OPENQUERY 사용으로 실행속도 개선 (0) | 2020.10.07 |
MSSQL] 프로시저, 뷰 문자열 검색 (0) | 2020.10.06 |
댓글