Если вы устанавливаете расширение intarray, это становится довольно простым:
select id, prods, cardinality(string_to_array(trim(prods, ','), ',')::int[] & array[142,87])
from bad_design;
В противном случае это немного сложнее:
select bd.id, bd.prods, m.matches
from bad_design bd
join lateral (
select bd.id, count(v.p) as matches
from unnest(string_to_array(trim(bd.prods, ','), ',')) as l(p)
left join (
values ('142'),('87') --<< these are your input values
) v(p) on l.p = v.p
group by bd.id
) m on m.id = bd.id
order by bd.id;
Пример в Интернете: http: //rextester.com/ZIYS97736
Но вы действительно должны исправить свою модель данных.
Лучший способ - решить связанную систему, то есть интегрировать DE для f
одновременно с текущей DE. Если это вариант вашей предыдущей задачи по математике. SE, то такой совместный подход неизбежен.
Что касается буквального решения, используйте интерполяцию
def f(x): return numpy.interp(x, x_samples, f_samples)
и затем вызовите эту функцию в функции ODE
def y_ODE(x,y): return [y[1], -0.5*f(x)*y[1]]