Поле price_text хранит цены как текст: 2, 10, 100. Аналитик написал WHERE price_text > '10' и получил неожиданный набор строк. Как сделать сравнение числовым?

AОставить как есть и ориентироваться на лексикографическое сравнение строк в WHERE
BЗаменить > на LIKE '1%', и для текстовых цен это даст корректный отбор по величине
CСделать явное приведение типа: WHERE CAST(price_text AS int) > 10 для числового сравнения
DИспользовать WHERE LENGTH(price_text) > 2 как замену числовому сравнению по разрядности
Правильный ответ. Сравнение текстов и чисел — это разные операции: для числовой логики нужно явное приведение типа.

Разбор

Текст в WHERE сравнивается лексикографически, поэтому '100' ведёт себя не как число 100, а как строка, начинающаяся с символа '1'. Если поле фактически хранит число в виде строки, нужно явно привести его к числовому типу через CAST(price_text AS int) или price_text::int. Тогда сравнение будет соответствовать бизнес-смыслу. LIKE и LENGTH сравнивают форму строки, а не её числовое значение, и не дают корректного порядка чисел.

Проверь себя · 1/3разбор после ответа
Поле price_text хранит цены как текст: 2, 10, 100. Аналитик написал WHERE price_text > '10' и получил неожиданный набор строк. Как сделать сравнение числовым?
Тренировать SQL в Telegram

Ещё вопросы по теме «Строки и приведение типов»