无法使用 SQL JSON_QUERY 提取 属性
Unable to extract property with SQL JSON_QUERY
我将以下 Json 数据存储在 sql table 中:
{"OrderNumber":"12450-OF","OrderType":"OF"}
我需要从 sql 查询中提取订单号
下面的语句returns null
:
select
JSON_QUERY(Metadata,'$.OrderNumber') AS 'orderNumber'
from Documents
其中 Documents
是我的 table,metadata
是存储我的 json 数据的列。
您需要使用 JSON_VALUE()
从 JSON 内容中提取标量值。 JSON_QUERY()
通常用于从 JSON 字符串中提取对象或数组。
SELECT JSON_VALUE(Metadata,'$.OrderNumber') AS 'orderNumber'
FROM (VALUES
('{"OrderNumber":"12450-OF","OrderType":"OF"}')
) Documents (Metadata)
请注意,如果您想从存储的 JSON 中提取更多值,另一种选择是使用显式模式 OPENJSON()
:
SELECT *
FROM Documents d
CROSS APPLY OPENJSON(d.Metadata, '$') WITH (
OrderNumber varchar(10) '$.OrderNumber',
OrderType varchar(2) '$.OrderType'
) j
您只需将函数 Json_Query 替换为 JSON_VALUE。
JSON_VALUE use for getting value from json.
JSON_Query use for getting object from json string.
例如,如果您有:
"OrderNumber":["12450-OF","12450-02"]
那么您的查询将 return 对象
["12450-OF","12450-02"]
我将以下 Json 数据存储在 sql table 中:
{"OrderNumber":"12450-OF","OrderType":"OF"}
我需要从 sql 查询中提取订单号
下面的语句returns null
:
select
JSON_QUERY(Metadata,'$.OrderNumber') AS 'orderNumber'
from Documents
其中 Documents
是我的 table,metadata
是存储我的 json 数据的列。
您需要使用 JSON_VALUE()
从 JSON 内容中提取标量值。 JSON_QUERY()
通常用于从 JSON 字符串中提取对象或数组。
SELECT JSON_VALUE(Metadata,'$.OrderNumber') AS 'orderNumber'
FROM (VALUES
('{"OrderNumber":"12450-OF","OrderType":"OF"}')
) Documents (Metadata)
请注意,如果您想从存储的 JSON 中提取更多值,另一种选择是使用显式模式 OPENJSON()
:
SELECT *
FROM Documents d
CROSS APPLY OPENJSON(d.Metadata, '$') WITH (
OrderNumber varchar(10) '$.OrderNumber',
OrderType varchar(2) '$.OrderType'
) j
您只需将函数 Json_Query 替换为 JSON_VALUE。
JSON_VALUE use for getting value from json.
JSON_Query use for getting object from json string.
例如,如果您有:
"OrderNumber":["12450-OF","12450-02"]
那么您的查询将 return 对象
["12450-OF","12450-02"]