遇到的问题:
排序字段(楼栋号),数据库中字段为字符串类型
对1,2,13,23等楼号进行排序
期望:1,2,13,23
实际:1,13,2,23
使用的是QueryBuilder的orderAsc方法
/** Adds the given properties to the ORDER BY section using ascending order. */
public QueryBuilder<T> orderAsc(Property... properties) {
orderAscOrDesc(" ASC", properties);
return this;
}
原因:因为字段是数字类型的字符串,所以还是按照字符串排序了
解决办法:
1.字段设计成int,然后使用orderAsc即可
2.使用自定义排序方法
/**
* Adds the given raw SQL string to the ORDER BY section. Do not use this for standard properties: orderAsc and
* orderDesc are preferred.
*/
public QueryBuilder<T> orderRaw(String rawOrder) {
checkOrderBuilder();
orderBuilder.append(rawOrder);
return this;
}
在数据库工具上测试完毕后,将orderby 后面的条件语句传递给orderRaw来自定义排序条件
修改后的代码如下:
.orderRaw("cast(buildingNo as decimal)")
另外网上还有另外一种方法,不使用数据库函数,在排序的字段后面拼接“0”;代码如下
select * from device order by buildingNo+'0';
使用greendao如下
.orderRaw("buildingNo+'0'");
希望对看到本文的你有所帮助