繁体   English   中英

使用 POstgres 进行不区分大小写的搜索

[英]Case Insensitive search with POstgres Similar To

我的 Django 代码中有这样的查询

cond = self.text_query(field.id, f'''
                                        EXISTS(
                                            SELECT *
                                            FROM {self.fieldvalue_db_view}
                                            WHERE entry_id = {self.db_table}.id AND
                                                                    {self.fieldvalue_db_view}.field_id = {field.id} AND
                                                                    {self.fieldvalue_db_view}.{text_search_column} SIMILAR TO %(pattern)s
                                        )
                                    ''', dict(pattern='%' + val + '%'))

什么时候

val = '%%john smith%%' or val = '%%john%smith%%'

它没有返回像 'John smith' 这样的结果,但如果

val = '%%john%smith%|%smith%john%%'

它返回带有“John smith”的结果。

如何解决这种区分大小写的问题?

谢谢,

你可以使用ilike

EXISTS(
    SELECT
        1
    FROM
        { self.fieldvalue_db_view }
    WHERE
        entry_id = { self.db_table }.id
        AND { self.fieldvalue_db_view }.field_id = { field.id }
        AND { self.fieldvalue_db_view }.{ text_search_column } ILIKE %(pattern) s
)

当您检查行是否存在时,您也不需要返回所有列,而是传递一个更便宜的常量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM