添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
高大的茄子  ·  c:\windows\assembly - ...·  1 周前    · 
帅气的生姜  ·  Excel ...·  6 月前    · 
闷骚的灌汤包  ·  curl转python工具 ...·  1 年前    · 

适用于: SQL Server 2016(13.x)及更高版本 Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics

从 JSON 字符串中提取标量值。

若要从 JSON 字符串而不是标量值中提取对象或数组,请参阅 JSON_QUERY (Transact-SQL) 。 有关 JSON_VALUE JSON_QUERY 之间差异的信息,请参阅 比较 JSON_VALUE 和 JSON_QUERY

Transact-SQL 语法约定

JSON_VALUE ( expression , path )  

expression

一个表达式。 通常是包含 JSON 文本的变量或列的名称。

如果 JSON_VALUE 在找到由 path 标识的值之前,找到在 expression 中无效的 JSON,则函数会返回错误。 如果 JSON_VALUE 找不到由 path 标识的值,则它会扫描整个文本,并且会在找到在 expression 中任何位置无效的 JSON 时返回错误。

指定要提取属性的 JSON 路径。 有关详细信息,请参阅 JSON 路径表达式 (SQL Server)

在 SQL Server 2017 (14.x) 和 Azure SQL 数据库 中,可提供变量作为 path 的值。

如果 path 格式无效,则 JSON_VALUE 返回错误。

返回 nvarchar(4000) 类型的单个文本值。 返回值的排序规则与输入表达式的排序规则相同。

如果值大于 4000 个字符:

  • 在宽松模式下,JSON_VALUE 返回 NULL

  • 在严格模式下,JSON_VALUE 返回错误。

    如果必须返回大于 4000 个字符的标量值,请使用 OPENJSON 而不是 JSON_VALUE。 有关详细信息,请参阅 OPENJSON (Transact-SQL)

    无论 JSON 文档以 varcharnvarchar 还是本机 json 数据类型存储,JSON 函数的工作方式均相同。

    宽松模式和严格模式

    请参考以下 JSON 文本:

    DECLARE @jsonInfo NVARCHAR(MAX)
    SET @jsonInfo=N'{  
         "info":{    
           "type":1,  
           "address":{    
             "town":"Bristol",  
             "county":"Avon",  
             "country":"England"  
           "tags":["Sport", "Water polo"]  
        "type":"Basic"  
    

    下表对宽松模式和严格模式下 JSON_VALUE 的行为进行了比较。 有关可选路径模式规范(宽松或严格)的详细信息,请参阅 JSON 路径表达式 (SQL Server)

    宽松模式下的返回值 严格模式下的返回值

    以下示例在查询结果中使用 JSON 属性 townstate 的值。 由于 JSON_VALUE 保留了源的排序规则,因此结果的排序顺序取决于 jsonInfo 列的排序规则。

    (此示例假定名为 Person.Person 的表包含 JSON 文本的 jsonInfo 列,并且此列具有前面讨论的宽松模式和严格模式中显示的结构。在 AdventureWorks 示例数据库中,Person 表实际上不包含 jsonInfo 列。)

    SELECT FirstName, LastName,
     JSON_VALUE(jsonInfo,'$.info.address.town') AS Town
    FROM Person.Person
    WHERE JSON_VALUE(jsonInfo,'$.info.address.state') LIKE 'US%'
    ORDER BY JSON_VALUE(jsonInfo,'$.info.address.town')
    

    下面的示例将 JSON 属性 town 的值提取到本地变量。

    DECLARE @jsonInfo NVARCHAR(MAX)
    DECLARE @town NVARCHAR(32)
    SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
    SET @town=JSON_VALUE(@jsonInfo,'$.info.address[0].town'); -- Paris
    SET @town=JSON_VALUE(@jsonInfo,'$.info.address[1].town'); -- London
    

    下面的示例基于 JSON 属性的值创建计算列。

    CREATE TABLE dbo.Store
      StoreID INT IDENTITY(1,1) NOT NULL,
      Address VARCHAR(500),
      jsonContent NVARCHAR(4000),
      Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
      Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
    
  • JSON 路径表达式 (SQL Server)
  • SQL Server 中的 JSON 数据
  •