【问题标题】:SQLite price comparison between differently formatted strings [duplicate]不同格式的字符串之间的SQLite价格比较[重复]
【发布时间】:2021-02-20 15:04:53
【问题描述】:

我在其他列中表示价格列,如下所示:

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。

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

感谢您考虑我的问题。

【问题讨论】:

标签: sql sqlite sql-order-by decimal


【解决方案1】:

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

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

order by price + 0

Here 是一个 dbfiddle。

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

【讨论】:

  • 我将价格存储为字符串,因为我不知道如何将它们限制为最多两位小数。您能否为我提供一个以数字形式存储价格的替代方案?提前致谢
  • @NilsR 。 . .我建议您切换数据库并使用numeric() 数据类型,它们会在任何其他数据库中自动执行此操作。也就是说,您可以检查它,同时仍将数据类型保留为数字。
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2018-01-16
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多