BETWEEN
работает со строками . Он отлично работает - строки расположены в алфавитном порядке.
Ваша проблема в том, что BETWEEN
в строках не соответствует порядку чисел c. Что ж, это нормально. Если я говорю по-французски, я бы не ожидал, что говорящий на английском sh меня поймет. То же и с типажами. Если я использую BETWEEN
для строк, то я ожидаю, что сравнения будут на основе string , а не numeri c. (Кстати, то же самое верно и для дат.)
Исправьте ваши данные, чтобы значения сохранялись как numeric
/ decimal
значения. Это числа с фиксированным количеством десятичных знаков, именно то, что необходимо для денежных значений.
В большинстве баз данных вам нужно будет избавиться от знака доллара. Примерно так должно работать:
update t
set price = replace(price, '$', '');
alter table t alter column price numeric(10, 2); -- or whatever is appropriate
Точный синтаксис может отличаться в зависимости от базы данных.