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'");

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值