【问题标题】:Android Room order by when field is null字段为空时的 Android 房间顺序
【发布时间】:2020-04-28 15:04:25
【问题描述】:

我使用 Room Persistence Library 来存储联系信息。 我想根据姓氏和名字检索联系人。

问题是没有姓氏和名字 ( null ) 的联系人被接收到列表的顶部。 如何查询以使它们位于列表底部?

这是我的查询:

select * from CacheContact order by lastName asc,firstName asc LIMIT :count OFFSET :offset

CacheContact 对象:

@Entity
public class CacheContact {

    private String expireDate;

    @PrimaryKey
    private long id;
    private String firstName;
    private long userId;
    private String lastName;
    private Boolean blocked;
    private long creationDate;
    private String profileImage;

    @Embedded
    private LinkedUser linkedUser;
    private String cellphoneNumber;
    private String email;
    private String uniqueId;
    private long notSeenDuration;
    private boolean hasUser;

全道法:

@Query("select * from CacheContact order by lastName asc,firstName asc LIMIT :count OFFSET :offset")
    List<CacheContact> getContacts(Integer count, Long offset);

【问题讨论】:

    标签: android sqlite android-room


    【解决方案1】:

    试试这样:

    select * from CacheContact order by lastName is null or lastName='', lastName, firstName is null or firstName='', firstName LIMIT :count OFFSET :offset
    

    上述查询还检查空字符串值。

    SQLite Release 3.30.0 开始,你也可以使用NULLS LAST,所以你可以这样做:

    select * from table order by column_name NULLS LAST;
    

    【讨论】:

    • 您能详细解释一下吗?为 null 或 lastName=''
    • @HiddenCoder7 它正在检查列是否为空或是否为空字符串,如果您不想要空字符串部分,您可以从查询中删除 or 部分
    【解决方案2】:
    select * from CacheContact 
    order by case when lastName is null or firstName is null then 1 else 0 end, 
    lastName asc, firstName asc LIMIT :count OFFSET :offset
    

    【讨论】:

    • 谢谢,但 firstName 和 lastName 为空的联系人在此查询中从第一位移至第三位,但此答案更准确,并将该联系人发送到末尾:stackoverflow.com/a/61484232/5646338
    猜你喜欢
    • 2023-02-23
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2023-04-06
    • 2010-11-09
    相关资源
    最近更新 更多