Postgres,如果条件选择

时间:2018-12-13 18:15:33

标签: sql postgresql case

在数据库中,我有一个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 :(得分:0)

查看当前时间戳:

SELECT 
  CASE WHEN split_part('suspended 1544725347', ' ', 1) = 'suspended' THEN
    to_timestamp( cast( split_part('suspended 1544725347', ' ', 2) as double precision) )
  END