А как компьютеры на них тогда по сети посылают, что печатать надо?
SELECT *, price * (1 - sale / 100) AS discounted_price
FROM item
WHERE price * (1 - sale / 100) BETWEEN 1000 AND 16000
AND sex IN ("Мужской", "Женский")
AND category IN ("Брюки", "Бомберы", "Анораки")
ORDER BY discounted_price;
Ну сразу два вывода.
Первый - БД организована неправильно. Тот, кто её делал, предпочёл не изучить нормальные формы, а высосать структуру из пальца. Получилось ... ну то, что получилось.
Второй - получение тоже организовано неправильно. Сервер БД, при правильно написанном запросе, легко и непринуждённо приведёт все данные к одному знаменателю. И сделает это гораздо быстрее и эффективнее, чем написанный одним программистом код, даже если этот программист гениален.
Итого. Если ещё пока есть возможность - лучше срочно переделать структуру хранения, даже если из-за этого придётся переписать запросы в половине приложения - всё равно экономия будет солидная, особенно на стадии эксплуатации и поддержки.
Что же до решения озвученной задачи без оглядки на её [censored] - можно выполнить последовательный парсинг в рекурсивном CTE, можно использовать синтетическую опорную таблицу чисел для парсинга... можно даже заменами преобразовать в JSON и обработать JSON_TABLE... но ни один из этих способов не будет эффективен.
Для унификации кода - explode-ить всё. Просто то, что не требует разделения, даст на выходе массив из 1 элемента.