Postgres, выберите с условием if - PullRequest
0 голосов
/ 13 декабря 2018

В БД у меня есть строка json, которая может содержать различные типы статуса учетной записи (к сожалению, мы не можем изменить структуру таблицы).2 примера:

"status": "account blocked. Reason test"

"status": "suspended 1544724336657"

Вопрос в том, можно ли проверить, приостановлен ли статус и отделить ли "приостановлено" от метки времени, и преобразовать эту метку в дату?И вернуть его как тип | приостановлено до | 1544724336657?Легко принять все значение статуса, но когда я пытаюсь добавить оператор if, я получаю ошибку.Я пытался сделать это так:

select 
  id, 
  if (status::jsonb->'status')::text 
      like '%suspended%' then split_part(status::jsonb->'status'::text, ' ', 1) status, 
  split_part(status::jsonb->'status'::text, ' ', 2) until else 
  status::>jsonb->'status' status end if 
where 
  status is not null;

1 Ответ

0 голосов
/ 13 декабря 2018

Просмотр текущей метки времени:

SELECT 
  CASE WHEN split_part('suspended 1544725347', ' ', 1) = 'suspended' THEN
    to_timestamp( cast( split_part('suspended 1544725347', ' ', 2) as double precision) )
  END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...