【问题标题】:sql search on fields containing diacriticssql搜索包含变音符号的字段
【发布时间】:2011-03-29 00:25:53
【问题描述】:

我正在使用 Sql server 2008 express edition 进行网站搜索。

我有一个 'Books' 表,其中有一个名为 'Title' 的字段,其中包含包含罗马尼亚(拉丁)字符的标题。

好吧,如果用户在搜索字段中插入一个单词,例如:'casa',并且我在 db 中有一个标题,例如:'test casă test',我想要展示那本书但是:

select * from books where title like '%casa%'

找不到...

您知道在选择时删除变音符号的任何功能吗?

我知道我可以用 sql server 的全文搜索插件来解决这个问题,但我想用一种更简单的方式来解决这个问题。

【问题讨论】:

    标签: sql sql-server-2008 collation


    【解决方案1】:
    select * from books where title COLLATE Latin1_General_CI_AI like '%casa%'
    

    当然,你应该选择一个与你匹配的排序规则......只需将最后的 AS 更改为 AI 以使其“不区分重音”

    德语变音符号的简单示例

    DECLARE @foo TABLE (bar varchar(100) /*implied COLLATE Latin1_General_CI_AS*/)
    
    INSERT @foo VALUES ('xxx fish yyy')
    INSERT @foo VALUES ('xxx bar yyy' )
    INSERT @foo VALUES ('xxx bär yyy')
    
    select * from @foo where bar COLLATE Latin1_General_CI_AI like '%bar%'
    select * from @foo where bar like '%bar%'
    

    【讨论】:

    • 另外,如果您总是希望搜索不区分重音,您可以更改数据库的排序规则。
    • 还有一个问题:你也知道如何在 linq 中执行此操作吗?非常感谢!
    • @Cristian Boariu:对不起,我没有。也许你无论如何都不能......stackoverflow.com/questions/488249
    【解决方案2】:

    您需要使用不区分重音的整理子句。

    【讨论】:

      【解决方案3】:

      如果您需要在 linq 中执行此操作,我认为您必须先删除搜索字符串中的变音符号,然后再进行 linq 查询......它应该可以工作......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-03
        • 2011-12-12
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        相关资源
        最近更新 更多