Сравнение значений строки в запросе MySQL
-
20-09-2019 - |
Вопрос
У меня возникли проблемы со сравнением значений, найденных в полях VARCHAR.
У меня есть таблица с продуктами, и каждый продукт имеет объем.Я сохраняю том в поле VARCHAR, и обычно это число (30, 40, 200...), но есть продукты, которые имеют несколько томов, и их данные хранятся через точку с запятой, например 30;60;80.
Я знаю, что хранить несколько томов таким образом не рекомендуется, но мне приходится работать с этим как есть.
Я пытаюсь реализовать функцию поиска по объему продуктов.Я хочу также отображать продукты, объем которых больше или равен объему искомого.Это не проблема продуктов с одним томом, но проблема с продуктами с несколькими томами.
Возможно, пример прояснит ситуацию:Допустим, у меня есть продукт с этим полем объема:30;40;70;80.Если кто-то искал объем, скажем, 50, я хочу, чтобы этот продукт отображался.
Для этого я подумывал написать свою собственную функцию MySQL (раньше я этого никогда не делал), но, возможно, кто-то предложит другое решение.
Прошу прощения за мой плохой английский, но надеюсь, что я ясно изложил свой вопрос.
Спасибо.
Решение
Вам нужно только сравнить с наибольшим значением.Всегда ли тома хранятся в порядке возрастания слева направо?Если да, то сравните со значением после последней точки с запятой, если она присутствует.Вы можете использовать SUBSTRING_INDEX для выбора последнего значения.
SELECT *
FROM products
WHERE CAST(SUBSTRING_INDEX(volume, ';', -1) AS UNSIGNED) >= 50