Я чувствую, что у нас нет всех частей здесь, но, используя эту строку JSON, вы можете получить значение для ключа 'a'
, просто используя OPENJSON
:
DECLARE @JSON nvarchar(MAX) = N'{"a":1,"b":2,"c":3,"d":4}';
SELECT [value]
FROM OPENJSON(@JSON)
WHERE [key] = 'a';
Я, конечно, предполагаю, что вы используете SQL Server 2016. В противном случае SQL Server не поддерживает синтаксический анализ JSON, и вам будет лучше использовать приложение для этого.
Для 2014- если вы просто хотите получить значение первого узла, вы можете сделать
SELECT V.JSON, SUBSTRING([JSON],CHARINDEX(':',[JSON])+1,CHARINDEX(',',[JSON])-(CHARINDEX(':',[JSON])+1))
FROM (VALUES(@JSON))V([JSON]);
Итак, для слепой догадки на вашем столе (поскольку я не могу проверить):
SELECT SUBSTRING([JSONString],CHARINDEX(':',[JSONString])+1,CHARINDEX(',',[JSONString])-(CHARINDEX(':',[JSONString])+1))
FROM (SELECT [value] AS BASE64_COLUMN FROM #test1) as testtable
CROSS APPLY (VALUES(CONVERT(VARCHAR(MAX),CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')))V(JSONString);
Это предполагает , что каждая строка в вашем выражении содержит как как минимум 1 :
символ, так и ,
символ. Если это не так, то нам нужны более (репрезентативные) выборочные данные.