Last active
February 6, 2017 22:13
-
-
Save bertwagner/c2b2d423de61878a254fdbfb6267d0a7 to your computer and use it in GitHub Desktop.
SQL Server 2016 JSON's OPENJSON() Function Part 2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- See https://gist.github.com/bertwagner/356bf47732b9e35d2156daa943e049e9 for a formatted version of this JSON | |
DECLARE @garage nvarchar(1000) = N'{ "Cars": [{ "Make": "Volkswagen", "Model": { "Base": "Golf", "Trim": "GL" }, "Year": 2003, "PurchaseDate": "2006-10-05T00:00:00.000Z" }, { "Make": "Subaru", "Model": { "Base": "Impreza", "Trim": "Premium" }, "Year": 2016, "PurchaseDate": "2015-08-18T00:00:00.000Z" }] }' | |
-- Here we retrieve the Make of each vehicle in our Cars array | |
SELECT JSON_VALUE(value, '$.Make') FROM OPENJSON(@garage, '$.Cars') | |
/* Output: | |
------------ | |
Volkswagen | |
Subaru | |
*/ | |
-- Parsing and converting some JSON dates to SQL DateTime2 | |
SELECT CAST(JSON_VALUE(value, '$.PurchaseDate') as datetime2) FROM OPENJSON(@garage, '$.Cars') | |
/* Output: | |
--------------------------- | |
2006-10-05 00:00:00.0000000 | |
2015-08-18 00:00:00.0000000 | |
*/ | |
-- We can also format the output schema of a JSON string using the WITH option. This is especially cool because we can bring up values from sub-arrays (see Model.Base and Model.Trim) to our top-level row result | |
SELECT * FROM OPENJSON(@garage, '$.Cars') | |
WITH (Make varchar(20) 'strict $.Make', | |
ModelBase nvarchar(100) '$.Model.Base', | |
ModelTrim nvarchar(100) '$.Model.Trim', | |
Year int '$.Year', | |
PurchaseDate datetime2 '$.PurchaseDate') | |
/* Output: | |
Make ModelBase Year PurchaseDate | |
-------------- ----------- ----------- --------------------------- | |
Volkswagen Golf 2003 2006-10-05 00:00:00.0000000 | |
Subaru Impreza 2016 2015-08-18 00:00:00.0000000 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment