Python 使用类似于的POstgres进行不区分大小写的搜索
我在Django代码中有这样的查询Python 使用类似于的POstgres进行不区分大小写的搜索,python,sql,django,postgresql,Python,Sql,Django,Postgresql,我在Django代码中有这样的查询 cond = self.text_query(field.id, f''' EXISTS( SELECT * FROM {self.fieldvalue_db_view}
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 + '%'))
什么时候
它没有像“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
)
你也不需要返回所有列,当你检查一行的存在,而不是传递一个更便宜的常数
你是否考虑将Valor转换为上行,然后将它与上面的结果进行比较?所以你将大写字母与大写字母进行比较,所有结果都将返回…不,我想给出一些单词并得到所有结果,这些单词的顺序和大小写不敏感。如果有3个单词,我可以使用ILIKE和多个条件吗?我想输入一些单词并得到所有结果,这些单词的顺序和大小写不敏感。。。使用like或pattern搜索并不容易,您可以改为查找全文搜索
。
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
)