SQL Server JSON_VALUE 语法

Posted

技术标签:

【中文标题】SQL Server JSON_VALUE 语法【英文标题】:SQL Server JSON_VALUE syntax 【发布时间】:2017-11-08 21:02:46 【问题描述】:

我创建了一个包含 25 列的 SQL Server 表。我的专栏之一实际上是 JSON 文本,存储为 nvarchar(max)。

现在我需要能够查询这个 JSON 列并解析出各种属性。我尝试将 JSON_VALUE 应用于我的列,但做错了;我的查询运行,但所有值都返回 NULL。

JSON 本身看起来像:

[
 
  "lineName":"GHjr",
  "pipeDiameter":"12",
  "pipeLength":"52000",
  "pressure":"15",
  "volume":"107"
 ,
 
  "lineName":"Ks3R",
  "pipeDiameter":"9",
  "pipeLength":"40000",
  "pressure":"15",
  "volume":"80"
 
]

我使用的 SQL 是:

select
 DOC_ID, LINE_SPECS,
 JSON_VALUE(LINE_SPECS, '$.lineName')     as line_name,
 JSON_VALUE(LINE_SPECS, '$.pipe_Diameter') as diameter
from dbo.MY_TEST_DOCS
where ISJSON(LINE_SPECS) > 0
  and len(LINE_SPECS) > 3

但是,我的 2 个“已解析”列都返回 NULL。如何解析此列中的五个属性?

【问题讨论】:

JSON_VALUE 置于strict 模式,看看是否出现任何错误。默认模式是lax,不会产生错误,只会返回NULL。 docs.microsoft.com/en-us/sql/relational-databases/json/… 还有$.pipe_Diameter 我觉得应该是$.pipeDiameter 如果您删除方括号并使您的选择匹配 JSON 中区分大小写的名称,它将返回一个值 其实括号可以,如果是数组的话。 我不确定它会起作用。您可以改用 JSON_QUERY,但仍需要在方括号前有一个名称才能调用。 不确定我们是否看到了整个 JSON。 【参考方案1】:
Without the [] ISJSON is returning false
With [] ISJSON retuns true
Without the [] JSON_VALUE returns NULLs
With [] JSON_VALUE returns values

dbfddle.uk 有可用的 sql server 2016....

create table test (LINE_SPECS nvarchar(max));

insert into test values (N'
 
  "lineName":"GHjr",
  "pipeDiameter":"12",
  "pipeLength":"52000",
  "pressure":"15",
  "volume":"107"
 ,
 
  "lineName":"Ks3R",
  "pipeDiameter":"9",
  "pipeLength":"40000",
  "pressure":"15",
  "volume":"80"
 
');

select * 
from test
where ISJSON(LINE_SPECS) > 0
;

GO
| LINE_SPECS | | :--------- |
select
      JSON_VALUE(LINE_SPECS, '$.lineName')     as line_name
    , JSON_VALUE(LINE_SPECS, '$.pipeDiameter') as diameter
from test
;
GO
行名 |直径 :-------- | :-------- GHjr | 12

dbfiddle here

【讨论】:

(和其他人),你的回答真的很有帮助!我正在努力使用的 JSON 包括左括号和右括号。我创建了第二列,没有这些括号,并且 JSON_VALUE 按预期工作。谢谢大家的帮助! 您的问题现在解决了吗?你对这个答案还有疑问吗?要接受答案“Click the Tick”了解更多信息,请参阅help/accepting @CarCrazyBen 你能“接受”这个答案吗? ***s 的问题似乎没有答案,这使得其他人更难找到他们类似问题的答案。

以上是关于SQL Server JSON_VALUE 语法的主要内容,如果未能解决你的问题,请参考以下文章

C#Dapper使用JSON_VALUE进行SQL Server 2016

sql MS SQL JSON_VALUE

在 PL/SQL 中出现错误“PLS-00201:必须声明标识符‘JSON_VALUE’”

多个节点同名时使用 Oracle SQL 获取 JSON_VALUE

SQL JSON_VALUE 查询但没有路径名?

用于验证 sql 语法错误的 Powershell 脚本