我想查询内部json内容,如下所示

时间:2016-04-21 04:35:00

标签: json sql-server-2016

我正在保存JSON数据我的SQL server 2016表,我想通过在JSON上应用where子句来查询表,如下所示。

select c.customer_details.name.fullName 
from j_customer c 
where c.customer_details.name.fullName like '%Gopi%';

这在oracle中是可能的,但在mssql中它会出现如下错误

  

无法在nvarchar(max)上调用方法。

2 个答案:

答案 0 :(得分:2)

通过互联网后,我发现有一个名为JSON_VALUE()的方法应该用于查找json的内容。 mssql的语法是这样的。

select * from j_customer where JSON_VALUE(c.customer_details, '$.name.fullName') = 'C';

答案 1 :(得分:1)

据我了解,您已使用下面的查询将JSON数据存储到表中

declare @json nvarchar(max) = '"Customer_details":{"name":{"fullName":"Dhruv Joshi"}}'

 INSERT INTO j_customer
 SELECT * 
 FROM OPENJSON(@json)
 WITH (---some columns 
       fullName nvarchar(max) '$.Customer_details.name.fullName'
     )

在这种情况下,您可以简单地查询您的表格,如下所示

select c.fullName 
from j_customer c 
where c.fullName like '%Gopi%';

在SQL中,完全限定的SQL列名称通常类似于[DatabaseName].[schema].[tablename].[columnname],因此在WHERE子句中,SQL将c.customer_details.name.fullName解释为c.customer_details,列为c的列是别名。然后name.fullname看起来像是对列名称的方法调用,它会生成错误。