【发布时间】:2021-07-01 04:50:33
【问题描述】:
我有以下 SQLite 表(真实表的存根,它有一些其他列)
CREATE TABLE IF NOT EXISTS fingers(id INTEGER,intLL INTEGER,fracLat INTEGER,fracLng INTEGER,PRIMARY KEY(id)) WITHOUT ROWID;
此表中的一个典型条目是
INSERT INTO fingers(id,intLL,fracLat,fracLng) VALUES(1,12899,42513,4025);
有时我需要查询此表以提取行以匹配intLL 值,以使计算值满足可变条件。例如
SELECT * FROM fingers WHERE intLL = 12899 AND ('8508' = (CAST((ROUND(CAST(fracLat AS REAL)/500))
AS INTEGER) || CAST((ROUND(CAST(fraCLng AS REAL)/500)) AS INTEGER)));
说明
- 通过将
fractLat和fracLng列除以 10,250 或 500 来转换它们。CAST AS REAL是防止 SQLite 执行的默认整数除法所必需的 - 将小数结果四舍五入到最接近的整数。舍入后,默认情况下您将获得一个带有尾随
.0的值。CAST AS INTEGER确保将其删除 - 连接这两个部分。串联出错了。在本例中,连接结果将是 858 这不是我想要的
- 与传入值进行比较:在本例中为 8508。
我的问题
- 如何在需要连接之前用 0 填充这两个部分,以确保它们具有相同的位数
- 有没有更简单的方法来实现这一点?
【问题讨论】:
标签: sqlite concatenation calculated-columns zero-padding