Как выполнить поиск записей в Postgresql, где в подстроке число , которое меньше заданной величины

Рейтинг: 0Ответов: 1Опубликовано: 10.08.2023

Есть таблица и в ней поле 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 ?

Ответы

▲ 0Принят
WITH cte AS (
  SELECT agent, regexp_split_to_array(agent, '\D+') parts
  FROM test
)
SELECT agent
FROM cte
WHERE parts[2] :: INT < 7 
   OR parts[3] :: INT < 104;

fiddle