SQLite3 - 使用填充和连接计算 SELECT

SQLite3 - Calculated SELECT with padding and concatenation

我有以下 SQLite table(真实 table 的存根,它有一些其他列)

CREATE TABLE IF NOT EXISTS fingers(id INTEGER,intLL INTEGER,fracLat INTEGER,fracLng INTEGER,PRIMARY KEY(id)) WITHOUT ROWID;

此 table 中的典型条目是

INSERT INTO fingers(id,intLL,fracLat,fracLng) VALUES(1,12899,42513,4025);

我不时需要查询此 table 以提取匹配 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)));

说明

我的问题

  1. 如何在连接前需要时用 0 填充两个部分,以确保它们具有相同的位数
  2. 是否有更简单的方法来实现此目的?

填充 0s 的一种方法是在数字的开头连接 00 并与 SUBSTR() return 最后 2 个字符连接。
此外,您可以除以 500.0 以避免整数除法:

SELECT * FROM fingers 
WHERE intLL = 12899 
AND '8508' = SUBSTR('00' || CAST(fracLat / 500.0 AS INTEGER), -2) || 
             SUBSTR('00' || CAST(fraCLng / 500.0 AS INTEGER), -2)

另一种方法是使用函数 printf() 格式化数字:

SELECT * FROM fingers 
WHERE intLL = 12899 
AND '8508' = printf('%02d', fracLat / 500.0) || 
             printf('%02d', fraCLng / 500.0)

参见demo