SQL BETWEEN 价格存储为字符串
SQL BETWEEN prices stored as string
我 运行 遇到了一个问题。我将价格作为以下格式的字符串存储在我的数据库中:14.500,00
和 199,95
。一段时间后,我创建了这个范围滑块,以便用户可以按照提供的图像中看到的价格进行过滤。为此,我需要编写一个新查询,所以我在考虑 BETWEEN
in SQL 但这不适用于字符串。在 SQL 中使用范围滑块过滤价格有什么想法吗?
BETWEEN
对字符串有效。它工作得很好——字符串按字母顺序排列。
您的问题是字符串上的 BETWEEN
不遵循数字顺序。嗯,这很正常。如果我说法语,我不会指望说英语的人能听懂我的话。与类型相同。如果我在字符串上使用 BETWEEN
,那么我希望比较是基于 string,而不是数字。 (顺便说一句,日期也是如此。)
修复您的数据,以便将值存储为 numeric
/decimal
值。这些数字具有固定的小数位数,正是货币价值所需要的。
在大多数数据库中,您需要去掉美元符号。这样的事情应该有效:
update t
set price = replace(price, '$', '');
alter table t alter column price numeric(10, 2); -- or whatever is appropriate
确切的语法可能因数据库而异。
我 运行 遇到了一个问题。我将价格作为以下格式的字符串存储在我的数据库中:14.500,00
和 199,95
。一段时间后,我创建了这个范围滑块,以便用户可以按照提供的图像中看到的价格进行过滤。为此,我需要编写一个新查询,所以我在考虑 BETWEEN
in SQL 但这不适用于字符串。在 SQL 中使用范围滑块过滤价格有什么想法吗?
BETWEEN
对字符串有效。它工作得很好——字符串按字母顺序排列。
您的问题是字符串上的 BETWEEN
不遵循数字顺序。嗯,这很正常。如果我说法语,我不会指望说英语的人能听懂我的话。与类型相同。如果我在字符串上使用 BETWEEN
,那么我希望比较是基于 string,而不是数字。 (顺便说一句,日期也是如此。)
修复您的数据,以便将值存储为 numeric
/decimal
值。这些数字具有固定的小数位数,正是货币价值所需要的。
在大多数数据库中,您需要去掉美元符号。这样的事情应该有效:
update t
set price = replace(price, '$', '');
alter table t alter column price numeric(10, 2); -- or whatever is appropriate
确切的语法可能因数据库而异。