在数据库中,我有一个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;
答案 0 :(得分:0)
查看当前时间戳:
SELECT
CASE WHEN split_part('suspended 1544725347', ' ', 1) = 'suspended' THEN
to_timestamp( cast( split_part('suspended 1544725347', ' ', 2) as double precision) )
END