Android Порядок номеров, когда поле пусто - PullRequest
0 голосов
/ 28 апреля 2020

Я использую Room Persistence Library для хранения контактной информации. Я хочу получить контакты на основе фамилии и имени.

Проблема в том, что контакты без фамилии и имени (ноль) принимаются вверху списка. Как мне запросить их, чтобы получить их внизу списка?

вот мой запрос:

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

Ответы [ 2 ]

1 голос
/ 28 апреля 2020
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
1 голос
/ 28 апреля 2020

Попробуйте так:

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;
...