首页 > 解决方案 > 不同格式字符串之间的 SQLite 价格比较

问题描述

我在其他列中代表了一个价格列,如下所示:

CREATE TABLE customer(
     price VARCHAR(10) NOT NULL CHECK (INSTR(price, '.') = 0 OR (LENGTH(price) - 
     INSTR(price, '.') <= 2) AND
     price NOT GLOB '*[^0-9.]*')
);

请注意,我的任务是设计一个价格列,其中最多允许有两位小数。

现在,当我想对表格进行排序并说使用返回 3 个最高价格时

SELECT * FROM Kunde ORDER BY Guthaben desc LIMIT 3;

发生字符串比较,6.00 正确地大于 23.00。

除了确保所有价格都以相同的格式输入之外,还有其他解决方法吗?

谢谢你考虑我的问题。

标签: sqlsqlitesql-order-bydecimal

解决方案


为什么将价格存储为字符串?这是一个根本问题。它们是数字,应该存储为数字。

如果要将字符串排序为数字,可以转换它们。在 SQLite 中,只需添加即可0

order by price + 0

是一个 db<>fiddle。

但真正的答案是修复您的数据模型,以便将数字存储为数字,而不是字符串。


推荐阅读