情况:
我正在尝试将具有ID的表与具有ID和存储在base64值中的列的另一个表联接。我对其进行了解码,并使用JSON
函数从JSON
字符串的键'a'中提取了一个值。我收到了著名的错误消息:
JSON文本格式不正确。在位置1处发现意外字符'('。
在网上浏览了类似的错误之后,我添加了ISJSON() > 0
,因为它应该排除错误消息-但不是。
SELECT
u.ids,
base2.ExtractedValue
FROM #ids AS u
INNER JOIN (
SELECT base.Ids, JSON_VALUE(base.Base64Decoded, '$.a') as ExtractedValue
FROM (
SELECT
ids,
convert(
varchar(MAX),
CAST('' AS xml).value('xs:base64Binary(sql:column("value"))', 'VARBINARY(MAX)')
) AS Base64Decoded
FROM base64info
) AS base
WHERE ISJSON(base.Base64Decoded) > 0
AND base.Base64Decoded is not null
) AS base2 ON u.ids=base2.ids
WHERE base2.ExtractedValue IS NOT NULL
它在做什么错了?
答案 0 :(得分:0)
一个案例声明解决了这个问题:
CASE WHEN ISJSON(base.Base64Decoded) = 1 THEN JSON_VALUE(base.Base64Decoded, '$.a') END as ExtractedValue