172 похожих чатов

Всем привет вопрос, умеет ли postgresql постпроцессинг like? суть такая - код

хранит в БД англоязычную строку string/enum, а внутри имеет русскоязычные наименования.

Возможно ли провернуть такой трюк с поиском по результату case через like?

select
s.hostname,
case
when s.status = 'new' then 'Новый'
when s.status = 'exists' then 'Существует'
when s.status = 'changing' then 'Изменение'
when s.status = 'deleting' then 'Удаление'
when s.status in ('new_deleted', 'deleted') then 'Удален'
else s.status
end as status_text
from servers s
where status_text like '%ение%'

Ожидаю увидеть в качестве результата все записи со статусами Изменение и Удаление

8 ответов

13 просмотров

Используйте вложенный запрос или CTE. И при чём тут "постпроцессинг"? Это же просто логическая последовательность выполнения запросов, в "будущее" PostgreSQL не заглядывает. ;)

Daniil Zobov
что такое CTE?

WITH cte_name AS (SELECT ...) SELECT .. FROM cte_name ...

а почему просто по like '%ing%' не это, не того?)

Daniil-Zobov Автор вопроса
Igor Komarov
а почему просто по like '%ing%' не это, не того?)

конечный юзверь видит в морде Новый, Существует, итп)

Daniil-Zobov Автор вопроса
Yaroslav Schekin
WITH cte_name AS (SELECT ...) SELECT .. FROM cte_...

with status_enum (status, name) as ( values ('new', 'Новый'), ('exists', 'Существует'), ('changing', 'Изменение'), ('deleting', 'Удаление'), ('new_deleted', 'Удален'), ('deleted', 'Удален') ) select s.hostname, se.name from servers s join status_enum se on s.status = se.status where se.name like '%ение%'

Daniil Zobov
конечный юзверь видит в морде Новый, Существует, и...

Так выберите подходящие статусы на стороне приложения. Вы же где-то храните исходные данные для when s.status = 'exists' then 'Существует', вот и фильтруйте этот список соответствий, чтобы получить status IN ('exists', 'deleting'). Оно работать на порядки быстрее будет.

Daniil-Zobov Автор вопроса
Евгений Смирнов
Так выберите подходящие статусы на стороне приложе...

я проблематику, видимо, не до конца объяснил) у меня самописный поисковой движок, который ищет по всем колонкам одновременно. Юзать индексы sqlite либо elastic не представляется возможным из-за возможного лага в обновлении, плюс поиск по записи в себе содержит еще кучу данных из соседних записей из таблиц, связанных с искомой - тут включается еще триггерное обновление индекса при изменении зависимой сущности Сейчас человек может написать поисковую строчку, которую код раскидает на токены-слова-условия, и айлайком пройдется по полям в зависимости от их типа. Вот как раз enum’а не хватало, with cte прекрасно справился со своей задачей без лишнего усложнения кода P.S. для поиска автоматически генерируются километровые SQL запросы и PostgreSQL их прекрасно жрет и очень быстро ищет

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта