적용 대상:Microsoft Fabric의 MicrosoftFabric
SQL Database에 있는 Microsoft Fabric Warehouse의 SQL Server 2016(13.x) 이상 버전
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL 분석 엔드포인트
구문은 JSON_VALUE JSON 문자열에서 스칼라 값을 추출합니다.
스칼라 값 대신 JSON 문자열에서 개체 또는 배열을 추출하려면 JSON_QUERY 참조하세요.
JSON_VALUE와(과) JSON_QUERY의 차이점에 대한 정보는, JSON_VALUE 및 JSON_QUERY 비교를 참조하세요.
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
식입니다. 일반적으로 JSON 텍스트를 포함하는 변수 또는 열의 이름입니다.
JSON_VALUE로 식별된 값을 찾기 전에 식에서 유효하지 않은 JSON을 찾으면 함수는 오류를 반환합니다.
JSON_VALUE
경로로 식별된 값을 찾지 못하면 전체 텍스트를 검색하고 식에서 유효하지 않은 JSON을 찾으면 오류를 반환합니다.
path
추출할 속성을 지정하는 JSON 경로입니다. 자세한 내용은 SQL Database 엔진의 JSON 경로 식을 참조하세요.
SQL Server 2017(14.x) 및 Azure SQL Database에서 변수를 경로 값으로 제공할 수 있습니다.
경로 형식이 유효 JSON_VALUE 하지 않으면 오류를 반환합니다.
data_type
SQL 형식에 지정된 값을 반환합니다. 입력이 JSON 형식인 경우에만 지원됩니다. 지원되는 SQL 형식은 tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 및 datetimeoffset입니다.
반환 값
포함되지 않은 경우 RETURNING :
nvarchar(4000) 형식의 단일 텍스트 값을 반환합니다. 반환된 값의 데이터 정렬은 입력된 식의 데이터 정렬과 동일합니다.
값이 4000자를 초과하는 경우:
- lax 모드에서는
JSON_VALUE이(가)NULL를 반환합니다. - strict 모드에서는
JSON_VALUE이(가) 오류를 반환합니다.
4000자보다 큰 스칼라 값을 반환해야 하는 경우 대신 사용합니다
OPENJSONJSON_VALUE. 자세한 내용은 OPENJSON을 참조하세요.- lax 모드에서는
포함된 경우 RETURNING :
SQL 형식에 지정된 값을 반환합니다. 지원되는 SQL 형식은 tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 및 datetimeoffset입니다.
JSON 함수는 JSON 문서를 varchar, nvarchar 또는 네이티브 json 데이터 형식에 저장하든 동일하게 작동합니다.
Remarks
lax 모드와 strict 모드
다음 JSON 텍스트를 살펴보십시오.
DECLARE @jsonInfo AS NVARCHAR (MAX);
SET @jsonInfo = N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country/region":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}';
다음 표에서는 lax 모드 및 strict 모드에서 JSON_VALUE의 동작을 비교합니다. 선택적 경로 모드 사양(lax 또는 strict)에 대한 자세한 내용은 SQL Database 엔진의 JSON 경로 식을 참조하세요.
| Path | lax 모드에서 값을 반환합니다. | strict 모드에서 값을 반환합니다. | 추가 정보 |
|---|---|---|---|
| $ | NULL |
Error | 스칼라 값이 아닙니다. 대신 JSON_QUERY를 사용하세요. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info."address" | NULL |
Error | 스칼라 값이 아닙니다. 대신 JSON_QUERY를 사용하세요. |
| $.info.tags | NULL |
Error | 스칼라 값이 아닙니다. 대신 JSON_QUERY를 사용하세요. |
| $.info.type[0] | NULL |
Error | 배열이 아닙니다. |
| $.info.none | NULL |
Error | 속성이 없습니다. |
Examples
예제 1
다음 예에서는 쿼리 결과에서 JSON 속성 town 및 state의 값을 사용합니다.
JSON_VALUE은(는) 원본의 데이터 정렬을 유지하므로 결과의 정렬 순서는 jsonInfo 열의 데이터 정렬에 따라 다릅니다.
Note
(이 예제에서는 이름이 지정된 Person.Person 테이블에 JSON 텍스트 열이 포함되어 jsonInfo 있고 이 열에 lax 모드 및 strict 모드에 대한 논의에서 이전에 표시된 구조가 있다고 가정합니다. AdventureWorks 샘플 데이터베이스 Person 에서 테이블에는 실제로 열이 jsonInfo 포함되어 있지 않습니다.)
SELECT FirstName,
LastName,
JSON_VALUE(jsonInfo, '$.info.address.town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo, '$.info.address.state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo, '$.info.address.town');
예제 2
다음 예에서는 JSON 속성 town의 값을 로컬 변수로 추출합니다.
DECLARE @jsonInfo AS NVARCHAR (MAX);
DECLARE @town AS NVARCHAR (32);
SET @jsonInfo = N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[0].town'); -- Paris
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[1].town'); -- London
예제 3
다음 예에서는 JSON 속성 값을 기반으로 계산된 열을 만듭니다.
CREATE TABLE dbo.Store
(
StoreID INT IDENTITY (1, 1) NOT NULL,
Address VARCHAR (500),
jsonContent NVARCHAR (4000),
Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
);
예제 4
다음 예제에서는 값을 사용하여 JSON_VALUE JSON 배열에서 값을 추출하고 값을 날짜 형식 값으로 반환합니다.
DECLARE @j AS JSON = '[1, 1.3333, true, "a", "1", "2025-01-01"]';
SELECT JSON_VALUE(@j, '$[5]' RETURNING date) AS date_value;
date_value
--------
2025-01-01