Как выполнить поиск записей в Postgresql, где в подстроке число , которое меньше заданной величины
Есть таблица и в ней поле agent. Это строка
fr. 7.2.5 (950) / iPhone (iOS 155) / x86_64
fr. 7.25.5 (950) / iPhone (iOS 155) / x86_64
fr. 7.225.5 (950) / iPhone (iOS 155) / x86_64
Вот запрос
select * from some_table where agent ilike '%7.2%ios%
Для того, чтобы найти не только нужные цифры но и определенные слова (нужно было отобрать строки, которые содержат 'ios'), пришлось сделать так (выражение with cte ... предоставил @Akina)
CREATE TEMPORARY TABLE temp1 AS
SELECT *
FROM some_table rt
WHERE rt.agent ilike '%ios%';
select * from temp1;
WITH cte AS (
SELECT agent, regexp_split_to_array(agent, '\D+') parts
FROM temp1
)
SELECT *
FROM cte
WHERE parts[2] :: INT < 7
OR parts[3] :: INT < 105;
Update (решение за один запрос)
WITH cte AS (
SELECT agent, regexp_split_to_array(agent, '\D+') parts
FROM reactive_table
)
SELECT *
FROM cte
WHERE cte.agent ilike '%ios%'
and (parts[2] :: INT < 8
OR parts[3] :: INT < 105
);
Как найти все строки, где версия ниже чем 7.104 ?
Источник: Stack Overflow на русском