Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get data as rows from array inside JSON column

I have a table which the 'Preference' column stores JSON strings.

a) I would like to get the type from companytype as rows. In my attempt on sqlfiddle I get the five rows but no data in them.

SELECT z.[Type]
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') WITH (
    [Type] INT
) z
WHERE PreferenceID=1

b) How can I get the results as one string row i.e

1,2,3,4,5

This is the data inside the Preference column

   {
    "companysize":{"min":0,"max":5},
    "distance":{"min":100,"max":200},
    "companytype":{"type":[1,2,3,4,5]},
    "budget":{"min":1000,"max":2000}
    }

Fiddle is here

like image 971
alwaysVBNET Avatar asked Oct 30 '25 19:10

alwaysVBNET


1 Answers

Either remove the WITH clause and use the value field to retrieve the array's values, eg:

SELECT z.value as Type
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') z
WHERE PreferenceID=1

Or use just $ as the path in the WITH clause :

SELECT z.Type
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') 
            WITH ( Type int '$') z
WHERE PreferenceID=1

WITH applies to the results returned by OPENJSON. The path $.companytype.type is just an array of integers, it doesn't have any other attributes

like image 94
Panagiotis Kanavos Avatar answered Nov 01 '25 09:11

Panagiotis Kanavos



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!