sql - 不同格式字符串之间的 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。
除了确保所有价格都以相同的格式输入之外,还有其他解决方法吗?
谢谢你考虑我的问题。
解决方案
为什么将价格存储为字符串?这是一个根本问题。它们是数字,应该存储为数字。
如果要将字符串排序为数字,可以转换它们。在 SQLite 中,只需添加即可0
:
order by price + 0
这是一个 db<>fiddle。
但真正的答案是修复您的数据模型,以便将数字存储为数字,而不是字符串。
推荐阅读
- python - 如何处理 Excel 中的文本框弹出窗口?
- javascript - JavaScript 类 -> 数组迭代
- pdf - 有没有办法使用检查元素在 Chrome 或 firefox 中编辑 PDF?
- angular - Angular Route Reuse Strategy 使用其他路由的更改更新缓存状态
- javascript - 在节点 js 后端使用 FormData 和 XmlHttpRequest 上传文件显示空文件、字段
- android - 如何从 firebase 进行类似的搜索?
- pdf - Mac - 石英过滤器后校正 PDF 中的图像旋转
- python - 有歧义时Django如何映射url
- java - 处理最新的查询响应 Android
- c++ - 使用 CMake/VS2019 从柯南链接 spdlog 时库编译时间设置不匹配?