SQL МЕЖДУ ценами, хранящимися в виде строки - PullRequest
0 голосов
/ 06 мая 2020

У меня тут проблема. Я храню цены в своей базе данных в виде строки в следующем формате: 14.500,00 и 199,95. Некоторое время спустя я создал этот ползунок диапазона, чтобы пользователи могли фильтровать цены, как вы можете видеть на предоставленном изображении. Чтобы это сработало, мне нужно было написать новый запрос, поэтому я думал о BETWEEN в SQL, но это не работает со строками. Есть идеи для фильтрации по цене с помощью ползунка диапазона в SQL?

enter image description here

1 Ответ

1 голос
/ 06 мая 2020

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

Точный синтаксис может отличаться в зависимости от базы данных.

...