我有以下 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 填充这两个部分,以确保它们具有相同的位数
- 有没有更简单的方法来实现这一点?