Я фильтрую свою таблицу с данными об автомобилях на основе значений, полученных в json "cars". Если json не содержит какого-либо атрибута, этот параметр пропускается для фильтрации. Если бренд - «Ferrari», а цвет - «красный», а год - «2019», я хочу увидеть все красные феррари, выпущенные в 2019 году. Если просто бренд - «Ferrari», а в моем json отсутствует цвет или атрибут года, я хочу чтобы увидеть все красные Ferrari.
Я создал свой код, используя concatenate, но он работает только со значениями одного параметра. Я не могу понять, как заставить его работать как с красным, так и с черным ferrari одновременно или для всех автомобилей, выпущенных в 2017, 2018 и 2019 годах. Как извлечь несколько значений из json? Я буду благодарен за всю помощь.
CREATE FUNCTION mycar (cars json)
RETURNS TABLE (brand varchar, colour varchar, year int4, owner varchar)
AS $$
DECLARE
BEGIN
RETURN QUERY
SELECT brand, colour, year, owner
FROM car_table
WHERE table_brand=coalesce((cars::json->>'brand'),table_brand)
and table_year=coalesce((cars::json->>'year')::int,table_year)
and table_colour=coalesce((cars::json->>'colour'),table_colour);
RETURN;
END;
$$ LANGUAGE plpgsql;