#postgresql #postgresql-9.5
Вопрос:
В таблице user_record
есть столбец info
, который возвращает следующие данные, тогда info
как это jsonb
столбец.
запрос: Select info from user_record;
Результат:
{"someId": "XXFUN0123XX", "age": 43, "updatedAt": "2017-02-18 00:00:00"}
Теперь вопрос конкретно касается updatedAt
поля из ответа json
select info ->> 'updatedAt' from user_record where id='XXFUN0123XX';
Результат: 2017-02-18 00:00:00
Я должен обновить все временные метки updatedAt
полей info
столбца user_record
таблицы в этом формате ->> YYYY-MM-DDTHH:MI:SS 02:00
, поэтому, когда я это сделаю select info ->> 'updatedAt'
, я получу такой результат -> > 2017-02-18T00:00:00 02:00
.
Я уже перепробовал несколько способов и прочитал документацию, но не смог найти правильного решения. Ниже приведен один запрос, который я пытался выполнить
UPDATE user_record SET info = info || jsonb_build_object('updatedAt',
select to_timestamp(info ->> 'updatedAt','YYYY-MM-DDTHH:MM:SS 02:00') from user_record where id ='XXFUN0123XX')) where id = 'XXFUN0123XX';
В приведенном выше запросе я пытаюсь извлечь updatedAt
объект json из внутреннего запроса.
Ответ №1:
используйте jsonb_set
для внесения изменений в jsonb. и используйте to_char
вместо to_timestamp
того, как показано ниже:
update user_record
set info=jsonb_set(info,'{updatedAt}',to_jsonb(to_char((info ->> 'updatedAt')::timestamp,'YYYY-MM-DD"T"HH24:MI:SS 02:00')))
Комментарии:
1. Отличный Ответ. Было бы здорово, если бы вы могли добавить некоторые подробности о запросе, как он работает.