소개
JSON 관련 1개의 함수가 확장되고 3개의 새로운 함수가 추가되었습니다.
JSON 확장 또는 새로운 함수들
ISJSON ( expression [, json_type_constraint] )
expression에 지정한 문자열이 유효한 JSON이면 1을 아니면 0을 반환합니다. SQL Server 2016버전부터 지원한 함수이며 2022에서 json_type_constaint 인수가 추가되었습니다. VALUE/ARRAY/OBJECT/SCALAR 형식을 지정해서 만족 여부를 확인할 수 있습니다.
[예제] 간단한 예제코드입니다.
DECLARE @param varchar(max)
<div>
SET @param = '[
{
"name": "John",
"skills": ["SQL", "C#", "Azure"]
},
{
"name": "Jane",
"surname": "Doe"
}
]'
IF (ISJSON(@param) > 0)
BEGIN
SELECT 'JSON';
END
IF (ISJSON(@param, VALUE) = 1)
BEGIN
SELECT 'JSON';
END
JSON_PATH_EXISTS( value_expression, sql_json_path )
value_expression에 지정한 JSON 문자열에서 sql_json_path에 지정한 경로가 있으면 1 반환하고 그렇치 않으면 0을 반환합니다.
[예제] 간단한 예제코드입니다.
DECLARE @jsonInfo NVARCHAR(MAX)
SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SELECT JSON_PATH_EXISTS(@jsonInfo,'$.info.address'); — 1 반환
GO
DECLARE @jsonInfo NVARCHAR(MAX)
SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SELECT JSON_PATH_EXISTS(@jsonInfo,'$.info.addresses'); — 0 반환
JSON_OBJECT ( [ <json_key_value> [,…n] ] [ json_null_clause ] )
하나 이상의 json_key_value로 JSON 개체 텍스트를 생성합니다.
[예제] 간단한 예제코드입니다.
SELECT JSON_OBJECT();
SELECT JSON_OBJECT('name':'value', 'type':1)
SELECT JSON_OBJECT('name':'value', 'type':NULL ABSENT ON NULL) — NULL/ABSENT
SELECT JSON_OBJECT('name':'value', 'type':JSON_ARRAY(1, 2))
SELECT JSON_OBJECT('name':'value', 'type':JSON_OBJECT('type_id':1, 'name':'a'))
GO
DECLARE @id_key nvarchar(10) = N'id',@id_value nvarchar(64) = NEWID();
SELECT JSON_OBJECT('user_name':USER_NAME(), @id_key:@id_value, 'sid':(SELECT @@SPID))
GO
SELECT TOP(2)
s.session_id, JSON_OBJECT('security_id':s.security_id, 'login':s.login_name, 'status':s.status) as info
FROM sys.dm_exec_sessions AS s
WHERE s.is_user_process = 1;
JSON_ARRAY ( [ <json_array_value> [,…n] ] [ <json_null_clause> ] )
하나 이상의 json_array_value로 JSON 배열 텍스트를 생성합니다.
[예제] 간단한 예제코드입니다.
SELECT JSON_ARRAY();
SELECT JSON_ARRAY('a', 1, 'b', 2)
SELECT JSON_ARRAY('a', 1, 'b', NULL)
SELECT JSON_ARRAY('a', 1, NULL, 2 NULL ON NULL)
SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1))
SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1), JSON_ARRAY(1, null, 2 NULL ON NULL))
GO
DECLARE @id_value nvarchar(64) = NEWID();
SELECT JSON_ARRAY(1, @id_value, (SELECT @@SPID));
GO
SELECT s.session_id, JSON_ARRAY(s.host_name, s.program_name, s.client_interface_name)
FROM sys.dm_exec_sessions AS s
WHERE s.is_user_process = 1;
정리
즐거운 SQL 되세요~
모두 건강하세요.
김정선 드림
json함수는 Postgresql하고 똑같네요
그래요? 오~