如果 nickName 不为 null,则按 nickName 排序,否则按 firstName 排序

Order by nickName if nickName is not null, otherwise order by firstName

我有同样的问题

但是我没有找到任何解决方案来使用 nestJs 和带有 Repository-orm 的 postgres。

这是我的代码。

  const contacts = await this.contactRepository.find({
  order: { nickName: 'ASC', firstName: 'ASC', lastName: 'ASC' },
});

你必须使用 QueryBuilder。有关详细信息,请参阅 答案。

正如您在 中正确建议的那样,您必须结合使用 ORDER BY 子句和 COALESCE(...).

示例查询:

const contacts = await this.contactRepository
  .createQueryBuilder('contact')
  .orderBy('COALESCE(contact.nickName, contact.firstName, contact.lastName)', 'ASC')
  .getMany();