这个问题参考了我之前的SO主题。
简而言之,我尝试在Synapse SQL中解析JSON输入。
DECLARE @json nvarchar(max)
SET @json= '{"value": "{\"value\":[{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"},
{\"ERDAT\":\"20210511\"},{\"ERDAT\":\"20210511\"},"type": "String"}';
DECLARE @ReplacedDetails nvarchar(max), @ReplacedStringDetails nvarchar(max)
SET @ReplacedDetails = REPLACE(LTRIM(RTRIM(@json)),'\','');
SET @ReplacedStringDetails = REPLACE(@ReplacedDetails,',"type": "String"','');
SELECT @ReplacedStringDetails
CREATE TABLE #ValueTable_15
(
ColumnName varchar(200),
LastUpdatedValue varchar(200)
);
INSERT INTO #ValueTable_15 (ColumnName,LastUpdatedValue)
SELECT TOP(1) j2.[key],TRY_PARSE(j2.[value] as bigint) AS LastUpdatedValue
FROM OPENJSON(@ReplacedStringDetails, '$.value.value') j1
CROSS APPLY OPENJSON(j1.value) j2
ORDER BY LastUpdatedValue DESC;
然后,当我运行上面的查询时,出现错误:
Microsoft][ODBC Driver 17 for SQL Server][SQL Server]JSON text is not properly formatted. Unexpected character 'v' is found at position 13
当我只是简单地尝试SELECT @ReplaceStringDetails
时,它就给出了预期的结果。
我错过了什么?
P.S. I用简单的$.value
替换了$.value.value
,但没有产生任何结果。
1条答案
按热度按时间nlejzf6q1#
正如注解中所指出的,在
,"type": "String"}
之前的字符]}"
似乎被删除了。如果您更正了该编辑,您应该能够使用普通的OPENJSON()
表值函数解析JSON,例如:返回结果...
| 实体数据库|
| - -|
| 二○二一○五一一|
| 二○二一○五一一|
| 二○二一○五一一|
| 二○二一○五一一|