How to do Where clause on simple Json Array in SQL Server 2017?












0















Say I have a column in my database called attributes which has this value as an example:



  {"pages":["Page1"]}


How can I do a where clause so I can filter down rows that have "Page1" in it.



  select JSON_QUERY(Attributes, '$.pages') 
from Table
where JSON_QUERY(Attributes, '$.pages') in ('Page1')


Edit:



From the docs it seems like this might work though it seems so complicated for what it is doing.



  select count(*)
from T c
cross apply Openjson(c.Attributes)
with (pages nvarchar(max) '$.pages' as json)
outer apply openjson(pages)
with ([page] nvarchar(100) '$')
where [page] = 'Page1'









share|improve this question

























  • instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

    – Avi
    Jan 3 at 0:45


















0















Say I have a column in my database called attributes which has this value as an example:



  {"pages":["Page1"]}


How can I do a where clause so I can filter down rows that have "Page1" in it.



  select JSON_QUERY(Attributes, '$.pages') 
from Table
where JSON_QUERY(Attributes, '$.pages') in ('Page1')


Edit:



From the docs it seems like this might work though it seems so complicated for what it is doing.



  select count(*)
from T c
cross apply Openjson(c.Attributes)
with (pages nvarchar(max) '$.pages' as json)
outer apply openjson(pages)
with ([page] nvarchar(100) '$')
where [page] = 'Page1'









share|improve this question

























  • instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

    – Avi
    Jan 3 at 0:45
















0












0








0








Say I have a column in my database called attributes which has this value as an example:



  {"pages":["Page1"]}


How can I do a where clause so I can filter down rows that have "Page1" in it.



  select JSON_QUERY(Attributes, '$.pages') 
from Table
where JSON_QUERY(Attributes, '$.pages') in ('Page1')


Edit:



From the docs it seems like this might work though it seems so complicated for what it is doing.



  select count(*)
from T c
cross apply Openjson(c.Attributes)
with (pages nvarchar(max) '$.pages' as json)
outer apply openjson(pages)
with ([page] nvarchar(100) '$')
where [page] = 'Page1'









share|improve this question
















Say I have a column in my database called attributes which has this value as an example:



  {"pages":["Page1"]}


How can I do a where clause so I can filter down rows that have "Page1" in it.



  select JSON_QUERY(Attributes, '$.pages') 
from Table
where JSON_QUERY(Attributes, '$.pages') in ('Page1')


Edit:



From the docs it seems like this might work though it seems so complicated for what it is doing.



  select count(*)
from T c
cross apply Openjson(c.Attributes)
with (pages nvarchar(max) '$.pages' as json)
outer apply openjson(pages)
with ([page] nvarchar(100) '$')
where [page] = 'Page1'






json sql-server sql-server-2017






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 6:40









marc_s

584k13011241270




584k13011241270










asked Jan 3 at 0:06









chobo2chobo2

31.1k152408693




31.1k152408693













  • instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

    – Avi
    Jan 3 at 0:45





















  • instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

    – Avi
    Jan 3 at 0:45



















instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

– Avi
Jan 3 at 0:45







instead of in, have you tried using like ? I I think it gives the instances where we have Page 1 references (without even using Json_query), also with Json_query are you trying to extract the value there or the JSON format in the select list ?

– Avi
Jan 3 at 0:45














1 Answer
1






active

oldest

votes


















1














Something like this:



use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
(
select *
from openjson(T.Attributes,'$.pages')
where value = 'Page1'
)


returns



id          Attributes
----------- ---------------------------
1 {"pages":["Page1"]}
3 {"pages":["Page3","Page1"]}

(2 rows affected)





share|improve this answer
























  • ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

    – chobo2
    Jan 3 at 0:43












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014774%2fhow-to-do-where-clause-on-simple-json-array-in-sql-server-2017%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Something like this:



use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
(
select *
from openjson(T.Attributes,'$.pages')
where value = 'Page1'
)


returns



id          Attributes
----------- ---------------------------
1 {"pages":["Page1"]}
3 {"pages":["Page3","Page1"]}

(2 rows affected)





share|improve this answer
























  • ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

    – chobo2
    Jan 3 at 0:43
















1














Something like this:



use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
(
select *
from openjson(T.Attributes,'$.pages')
where value = 'Page1'
)


returns



id          Attributes
----------- ---------------------------
1 {"pages":["Page1"]}
3 {"pages":["Page3","Page1"]}

(2 rows affected)





share|improve this answer
























  • ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

    – chobo2
    Jan 3 at 0:43














1












1








1







Something like this:



use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
(
select *
from openjson(T.Attributes,'$.pages')
where value = 'Page1'
)


returns



id          Attributes
----------- ---------------------------
1 {"pages":["Page1"]}
3 {"pages":["Page3","Page1"]}

(2 rows affected)





share|improve this answer













Something like this:



use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
(
select *
from openjson(T.Attributes,'$.pages')
where value = 'Page1'
)


returns



id          Attributes
----------- ---------------------------
1 {"pages":["Page1"]}
3 {"pages":["Page3","Page1"]}

(2 rows affected)






share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 3 at 0:31









David Browne - MicrosoftDavid Browne - Microsoft

17k2827




17k2827













  • ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

    – chobo2
    Jan 3 at 0:43



















  • ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

    – chobo2
    Jan 3 at 0:43

















ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

– chobo2
Jan 3 at 0:43





ok, I will try that. I also came up with above from examples I found on the MS docs, though I think your seems simpler.

– chobo2
Jan 3 at 0:43




















draft saved

draft discarded




















































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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014774%2fhow-to-do-where-clause-on-simple-json-array-in-sql-server-2017%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

Npm cannot find a required file even through it is in the searched directory