刚开始在 SQL Server 中使用 JSON_VALUE
。我能够从 JSON 的名称/值对中提取值,但我碰巧有一个看起来像这样的对象:
["first.last@domain.com"]
当我尝试适用于名称/值对的方法时:
SELECT TOP 1
jsonemail,
JSON_VALUE(jsonemail, '$') as pleaseWorky
FROM MyTable
我取回了完整的输入,而不是 first.last@domain.com
。我倒霉了吗?我不控制数据的上游来源。我认为它是一个被转换为 json 有效负载的 sting 集合。如果是 name:first.last@domain.com,我可以通过 $.name
获得它。
提前致谢。
答案 0 :(得分:2)
它是一个 JSON 数组。所以你只需要指定它的索引,即 0。
请尝试以下解决方案。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, jsonemail NVARCHAR(MAX));
INSERT INTO @tbl (jsonemail) VALUES
('["first.last@domain.com"]');
-- DDL and sample data population, end
SELECT ID
, jsonemail AS [Before]
, JSON_VALUE(jsonemail, '$[0]') as [After]
FROM @tbl;
输出
+----+---------------------------+-----------------------+
| ID | Before | After |
+----+---------------------------+-----------------------+
| 1 | ["first.last@domain.com"] | first.last@domain.com |
+----+---------------------------+-----------------------+
答案 1 :(得分:0)
所以当根是一个数组并且你想要第一个值时你需要 JSON_VALUE(..., '$[0]')
。
要将其分成几行,您需要OPENJSON
:
SELECT TOP 1
jsonemail
,j.[value] as pleaseWorky
FROM MyTable
CROSS APPLY OPENJSON(jsonemail) j