GreenDao数字类型字符串排序问题

遇到的问题:
排序字段(楼栋号),数据库中字段为字符串类型
对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'");

希望对看到本文的你有所帮助

你可能感兴趣的:(android)