Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I have a column that has the following JSON in it (this is a small sample, there are a lot of other rows).
{ "Key": "priorityProduct", "Value": "0" },
{ "Key": "somethingElse", "Value": "another value" },
{ "Key": "remove", "Value": "1" },
{ "Key": "anotherHere", "Value": "27" }
I want to
SELECT
the value of the
remove
only in a SQL query and ignore the other values. So I could SELECT some SQL columns to say
name
,
address
and use something like this to fill the
remove
?
SELECT
[name], address,
JSON_VALUE(MyColumn, '$[Key:"remove"].Value') AS Remove
Does such a query syntax exist?
The JSON data in the question is a JSON array, so you need to parse this JSON with OPENJSON()
and explicit schema:
Table:
CREATE TABLE Data (
JsonData nvarchar(max),
[Name] nvarchar(100),
Address nvarchar(100)
INSERT INTO Data (
JsonData, [Name], [Address])
VALUES (
{"Key":"priorityProduct","Value":"0"},
{"Key":"somethingElse","Value":"another value"},
{"Key":"remove","Value":"1"},
{"Key":"anotherHere","Value":"27"}
]', N'Name', N'Address')
Statement:
SELECT d.[Name], d.[Address], j.[Value] AS [Remove]
FROM Data d
CROSS APPLY OPENJSON(d.JsonData) WITH (
[Key] nvarchar(100) '$.Key',
[Value] nvarchar(100) '$.Value'
WHERE j.[Key] = N'remove'
Result:
----------------------
Name Address Remove
----------------------
Name Address 1
If you want to use JSON_VALUE()
, the next statement may help. Note, that JSON_VALUE()
returns a single text value of type nvarchar(4000)
:
SELECT d.[Name], d.[Address], JSON_VALUE(j.[value], '$.Value') AS [Remove]
FROM Data d
CROSS APPLY OPENJSON(d.JsonData) j
WHERE JSON_VALUE(j.[value], '$.Key') = N'remove'
Of course, if this JSON has a fixed structure and remove
key is always at 3rd position, you may use something like this:
SELECT [Name], [Address], JSON_VALUE(JsonData, '$[2].Value') AS [Remove]
FROM Data
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.