Конвертировать дату в jsonb (Postgres) - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть данные столбца jsonb =

"{"history": [{"endDate": "30.06.2015", "classname": "Class A", "startDate": "2010-04-01", "numberAction": "0016", "positionName": "Teacher"},
 {"endDate": "31.06.2010", "classname": "Class A", "startDate": "2005-08-10", "numberAction": "0015", "positionName": "Student"},  
 {"endDate": "2005.08.09", "classname": "Class B", "startDate": "2005-02-21", "numberAction": "0014", "positionName": " Student "}]}"

Как видите, даты «endDate» в массиве не верны. Подскажите пожалуйста, как их можно конвертировать в формат ГГГГ-ММ-ДД?

Моя попытка простоя:

UPDATE table
SET data = jsonb_set(data, '{endDate}', to_date('{endDate}', 'YYYY-MM-DD'), false)
WHERE id = 'UUID';

1 Ответ

0 голосов
/ 07 апреля 2020

Ответ =

update table
   set data = data - 'history' || 
                   jsonb_build_object
                   ( 'history'
                   ,   ( select jsonb_agg 
                                  ( case when aa.value ->> 'endDate' like '%.%' then 
                                       aa.value - 'endDate' || jsonb_build_object
                                                                  ( 'endDate'
                                                                  ,  to_date(aa.value ->> 'endDate','dd.mm.yyyy')
                                                                  ) 
                                     else 
                                       aa.value
                                    end 
                                  )
                           from jsonb_array_elements(data -> 'history') as aa
                       )
                   )
WHERE uuid = 'UUID'
 and exists ( select *
                from jsonb_array_elements(data -> 'history') as aa
               where aa.value ->> 'endDate' like '%.%' 
            );  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...