我在表中有文本类型的数据,所以我将其转换为json。根据数据的id,我想更新列的值。
SELECT
CASE
WHEN is_json(data)
THEN data::json #> '{id}'
ELSE
NULL
END
FROM table;
UPDATE table SET hash = md5(
result from above query??
);
某种:
如何编写更新查询?
SELECT
CASE
WHEN is_json(data)
THEN data::json #> md5('{id}')
ELSE
NULL
END
FROM table;
我有一个json存储在一个文本列中。数据:
{'id': 'e807b554-fd15-4f7c-bbc5-d9531c8174a9','array': ['a'], 'rank': 151}
我的存储过程是:
CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
DECLARE
maybe_json json;
BEGIN
BEGIN
maybe_json := input_text;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
RETURN TRUE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
当我选择查询时:
select * from table where is_json(data);
我得到了空排。而数据具有文本形式的json。
这就是您想要的吗?
update mytable
set hash = md5(case when is_json(data) then data::json #>> '{id}' end)
或者,如果您只想更新包含有效json:的行
update mytable
set hash = md5(data::json #>> '{id}')
where is_json(data)