Я считаю, что следующее может делать то, что вы хотите, или что-то близкое к тому, что вы хотите: -
WITH cte1(search_item) AS (SELECT 'bou') -- <<<<<<<<<< search argument
SELECT
CASE
WHEN mytext LIKE (select search_item FROM cte1)||'%'
THEN mytext||' - begins with '||(select search_item FROM cte1)
ELSE
mytext||' - includes '||(select search_item FROM cte1)
END AS phrased,
mytext
FROM mytable
WHERE mytext LIKE '%'||(select search_item FROM cte1)||'%';
Итак, используя в качестве теста следующее: -
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mytext TEXT);
INSERT INTO mytable VALUES
('Bounce'),
('Bounce Back'),
('About Me'),
('About You'),
('Something Else'), -- ADDED to prove not found result
('Thinking About You')
;
WITH cte1(search_item) AS (SELECT 'bou') -- <<<<<<<<<< search argument
SELECT
CASE
WHEN mytext LIKE (select search_item FROM cte1)||'%'
THEN mytext||' - begins with '||(select search_item FROM cte1)
ELSE
mytext||' - includes '||(select search_item FROM cte1)
END AS phrased,
mytext
FROM mytable
WHERE mytext LIKE '%'||(select search_item FROM cte1)||'%';
Результат: -
![enter image description here](https://i.stack.imgur.com/Gr7om.png)
Тем не менее, следующее может быть больше того, что вы хотите (т.е. упорядочено в зависимости от того, начинаются ли найденные данные с аргумента поиска или нет): -
WITH
cte1(search_item) AS (
SELECT 'bou' -- <<<<<<<<<< search argument
),
cte2(phrased,ordering,mytext) AS (
SELECT
CASE
WHEN mytext LIKE (select search_item FROM cte1)||'%'
THEN mytext||' - begins with '||(select search_item FROM cte1)
ELSE
mytext||' - includes '||(select search_item FROM cte1)
END AS phrased,
CASE
WHEN mytext LIKE (select search_item FROM cte1)||'%'
THEN 0
ELSE 1
END AS ordering,
mytext
FROM mytable
WHERE mytext LIKE '%'||(select search_item FROM cte1)||'%'
)
SELECT mytext, phrased FROM cte2 ORDER BY ordering;
;
Что приводит к: -
![enter image description here](https://i.stack.imgur.com/1d7ck.png)