我正在使用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修改的值执行“group by” 我做错了什么?对mysql的相同查询工作正常。
感谢
答案 0 :(得分: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)
答案 1 :(得分: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>