我正在保存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)上调用方法。
答案 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
看起来像是对列名称的方法调用,它会生成错误。