Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Santa89 Member Откуда: Сообщений: 1494 |
Есть JSON:"statusTransitions": { "Problem Statement": [ "2017-10-11 13:54:36" ], "Signed": [ "2017-10-11 13:55:17", "2017-10-11 13:55:42" ], "Sign-off": [ "2017-10-11 13:55:10", "2017-10-11 13:55:34" ] } Т.е. в нём есть элемент Signed в виде массива из нескольких значений. Понятно, что для того чтобы взять первый элемент нужно писать SELECT * FROM OPENJSON((@FileContents, 'lax $.issues') WITH ( [signed_status_date] datetime '$.statusTransitions."Signed"[0]' ) А как выбрать последний элемент массива, если число таких элементов заранее неизвестно? Таких статусов Signed может быть например хоть 10ть... |
25 окт 17, 11:05 [20897895] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
А выбрать все и по нужному вам критерию выбрать требуемое? |
||
25 окт 17, 11:30 [20898014] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
https://stackoverflow.com/questions/42590025/how-to-reference-array-items-of-json-object-in-t-sql |
25 окт 17, 11:32 [20898028] Ответить | Цитировать Сообщить модератору |
Santa89 Member Откуда: Сообщений: 1494 |
Ролг Хупин, главное - выбрать последний элемент массива. Вот в JS это делается легко, что то типа:
jsonData.seats[jsonData.seats.length-1].countryid
|
25 окт 17, 11:39 [20898065] Ответить | Цитировать Сообщить модератору |
Santa89 Member Откуда: Сообщений: 1494 |
Тут к сожалению код где длина массива задаётся вручную: declare @i int = 1 А у меня неизвестно сколько элементов будет в массиве |
||
25 окт 17, 11:41 [20898083] Ответить | Цитировать Сообщить модератору |
Santa89 Member Откуда: Сообщений: 1494 |
Впринципе можно пройтись в цикле..но это такой косытилище...неужели нет варианта проще... |
25 окт 17, 11:45 [20898103] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Может это и вариант, поскольку "первый", "последний" - это эмоции, если не указан порядок. Вот еще вариант https://habrahabr.ru/post/317166/
|
||||
25 окт 17, 11:52 [20898147] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 34714 Блог |
Santa89, избавьтесь от json еще на этапе загрузки в базу |
26 окт 17, 16:58 [20903288] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
DECLARE @json NVARCHAR(MAX) = '{ "Problem Statement": [ "2017-10-11 13:54:36" ], "Signed": [ "2017-10-11 13:55:17", "2017-10-11 13:55:42" ], "Sign-off": [ "2017-10-11 13:55:10", "2017-10-11 13:55:34" ] }' SELECT TOP(1) [value] FROM OPENJSON(@json, '$.Signed') ORDER BY [key] DESC |
27 окт 17, 17:10 [20907458] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |