LIKE查询无法按预期工作

时间:2015-06-19 19:11:25

标签: sql ruby-on-rails sqlite

我有一个SQL查询,如下所示:

  

SELECT“medical_interventions”。“id”AS t0_r0,   “medical_interventions”。“refcode”AS t0_r1,   “medical_interventions”。“intervention_tid”AS t0_r2,   “medical_interventions”。“medical_intervention_category_id”AS t0_r3,   “medical_interventions”。“created_at”AS t0_r4,   “medical_interventions”。“updated_at”AS t0_r5,“translations”。“id”AS   t1_r0,“translations”。“lang”AS t1_r1,“translations”。“text”AS t1_r2,   “translations”。“created_at”AS t1_r3,“translations”。“updated_at”AS   t1_r4 FROM“medical_interventions”LEFT OUTER JOIN“translations”ON   “translations”。“id”=“medical_interventions”。“intervention_tid”AND   “translations”。“lang”='fr'WHERE(medical_intervention_category_id   = 7 AND文本如'%é%')

我的文字标有self.contactsTableView.sectionIndexBackgroundColor = [UIColor clearColor];

当我在上面的查询中只搜索évaluer时,我得到é正如我所期望的那样。但是,如果我尝试év:

  

SELECT“medical_interventions”。“id”AS t0_r0,   “medical_interventions”。“refcode”AS t0_r1,   “medical_interventions”。“intervention_tid”AS t0_r2,   “medical_interventions”。“medical_intervention_category_id”AS t0_r3,   “medical_interventions”。“created_at”AS t0_r4,   “medical_interventions”。“updated_at”AS t0_r5,“translations”。“id”AS   t1_r0,“translations”。“lang”AS t1_r1,“translations”。“text”AS t1_r2,   “translations”。“created_at”AS t1_r3,“translations”。“updated_at”AS   t1_r4 FROM“medical_interventions”LEFT OUTER JOIN“translations”ON   “translations”。“id”=“medical_interventions”。“intervention_tid”AND   “translations”。“lang”='fr'WHERE(medical_intervention_category_id   = 7 AND文本如'%év%')

我绝对没有结果。

有什么我不懂的东西吗?我可以使用其他功能进行搜索吗?

évaluer

在控制器中

AR:
    def self.find_by_search_query_and_problem_id(search_query, problem_id)
        problem = Problem.find(problem_id)
        category = ProblemCategory.find(problem.category_id)
        medIntCategory = MedicalInterventionCategory.find_by_category_text(category.category.text)

        search = search_query
        query = "medical_intervention_category_id =" + medIntCategory.id.to_s + " AND text like ?"
        return self.includes(:intervention).where(query, "%#{search}%").references(:intervention)
    end

在JS中:

def search
    @interventions = MedicalIntervention.find_by_search_query_and_problem_id(URI.unescape(params[:search_query]),params[:problem_id])
end

1 个答案:

答案 0 :(得分:1)

请参阅此帖子:How to SQL compare columns when one has accented chars?

另一个想法:

有一个简单的解决方案,但不是很优雅。

使用p功能删除重音符号。例:

REPLACE

SELECT YOUR_COLUMN FROM YOUR_TABLE WHERE replace(replace(replace(replace(replace(replace(replace(replace( replace(replace(replace( lower(YOUR_COLUMN), 'á','a'), 'ã','a'), 'â','a'), 'é','e'), 'ê','e'), 'í','i'), 'ó','o') ,'õ','o') ,'ô','o'),'ú','u'), 'ç','c') LIKE 'SEARCH_KEY%' 是您希望在列上找到的关键词。

或者:

可能的解决方案是用户定义函数(UDF)。有一个文档here描述了如何在PHP中为SQLite创建这样的函数。您可以编写一个名为DROPACCENTS()

的函数
相关问题