1

我正在使用 Android SQLite(使用 Galaxy s2 进行测试)我无法解决这个问题

我有一个这样的数据库:

COORDINATES
id latitude   longitude
1  37.996163  -116.644592
2  37.996163  -116.644592
3  37.957507  -116.67467
4  36.370157  -91.156311

我运行查询:

select CAST((latitude*10) AS UNSIGNED) AS lat, CAST((longitude*10) AS UNSIGNED) AS lon from coordinates group by lat,lon

我预计:

lat  lon
379  -1166
363  -911

相反,我得到:

lat  lon
379  -1166
379  -1166
363  -911

对未由 CAST 修改的值执行“分组依据”我做错了什么?mysql 上的相同查询完美运行。

谢谢

4

2 回答 2

1

试试这个,我不确定这是否可行,但我知道 select 子句中的更改在 where、group 中不起作用……所以试试这个

select CAST((latitude*10) AS UNSIGNED) AS lat, CAST((longitude*10) AS UNSIGNED) AS lon
from coordinates 
group by CAST((latitude*10) AS UNSIGNED), CAST((longitude*10) AS UNSIGNED)
于 2013-11-13T10:43:20.833 回答
1

sqlite 没有UNSIGNED数据类型,并且对其进行强制转换并没有真正做任何事情。这些值是浮点数,直到您调用例如Cursor getInt()将它们转换为整数。

改为例如INTEGER

sqlite> create table coordinates(id integer primary key, latitude, longitude);
sqlite> insert into coordinates values(1,37.996163,-116.644592),(2,37.996163,-116.644592),(3,37.957507,-116.67467),(4,36.370157,-91.156311);
sqlite> .head on
sqlite> select CAST((latitude*10) AS UNSIGNED) AS lat, CAST((longitude*10) AS UNSIGNED) AS lon from coordinates group by lat,lon;
lat|lon
363.70157|-911.56311
379.57507|-1166.7467
379.96163|-1166.44592
sqlite> select CAST((latitude*10) AS INTEGER) AS lat, CAST((longitude*10) AS INTEGER) AS lon from coordinates group by lat,lon;
lat|lon
363|-911
379|-1166
sqlite> 
于 2013-11-13T10:45:08.337 回答