TypeORM 选择不区分大小写的不同

Rem*_*ent 7 javascript postgresql node.js typeorm

我正在尝试创建一个连接到 postgresql 数据库的 TypeORM 查询生成器以获取数据库中的所有唯一名称。我的查询看起来像这样

names = await this._context.manager
        .getRepository(Names)
        .createQueryBuilder('names')
        .select('DISTINCT ON (names.name) names.name')
        .orderBy('names.name', 'ASC')
        .getRawMany();
Run Code Online (Sandbox Code Playgroud)

现在,此查询会获取数据库中的所有名称,但它区分大小写,因此无法从“jane doe”中筛选出“Jane Doe”等重复项。到目前为止,我已经尝试像这样制作不同的大写/小写: .select('DISTINCT ON LOWER(names.name) names.name')但这不起作用。我还找到了一个 .distinctOn() 函数,但我也无法使该函数不区分大小写。

我是 typeORM 的新手,所以我对从这里去哪里有点茫然,有什么想法吗?

我正在使用 Node.JS 开发 postgresql DB,如果这有什么区别的话。

noa*_*ner 5

本期的主题是 postgres 而不是 typeORM。类似的问题:Elimination Duplicate rows in Postgres

在您的情况下,正确的语法是:

names = await this._context.manager
        .getRepository(Names)
        .createQueryBuilder('names')
        .select('DISTINCT ON (LOWER(names.name)) names.name')
        .orderBy('LOWER(names.name)', 'ASC')
        .getRawMany();
 
Run Code Online (Sandbox Code Playgroud)


Awa*_*sir 5

ILIKE使用存储库,我以这种方式使用运算符以 postgres 作为数据库进行了不区分大小写的搜索

const planning_groups: any[] =
    await this.planningGroupRepository.find({
        where: `"tenant_id" ILIKE '${tenantId}'` 
    });
Run Code Online (Sandbox Code Playgroud)

其中,tenant_id是列名称,tenantId也是要搜索的关键字。