2013-05-21 48 views
0

我一直在環顧四周,發現了很多關於創建不區分重音的搜索的信息。這不是我所追求的。搜索重音字符

一些重音數據導致我的用戶界面出現問題,我正在尋找一些影響分析。

是否有一個優雅的方式來搜索字段任何重音字符,除了聯合許多不同的選擇與不同的字符在每個?

回答

0

自動分頁條款的改變foo的表達,讓你GROUP BY分別

DECLARE @t TABLE (foo varchar(100)); 

INSERT @t VALUES ('bar'), ('bár'), ('xxx'), ('yyy'), ('foo'), ('foó'), ('foö'); 

SELECT 
    foo COLLATE Latin1_General_CI_AI, 
    MIN(foo COLLATE Latin1_General_CI_AS), MAX(foo COLLATE Latin1_General_CI_AS) 
FROM 
    @t 
GROUP BY 
    foo COLLATE Latin1_General_CI_AI 
HAVING 
    MIN(foo COLLATE Latin1_General_CI_AS) <> MAX(foo COLLATE Latin1_General_CI_AS); 

或者

SELECT 
    foo COLLATE Latin1_General_CI_AI, 
    COUNT(*) 
FROM 
    @t 
GROUP BY 
    foo COLLATE Latin1_General_CI_AI 
HAVING 
    COUNT(*) > 1; 

第一個給你一些實際值,而不僅僅是一個計數。但並不是所有的,如果你有幾個重音的話

對於SQL Server 2012,您可以使用此

SELECT 
    * 
FROM 
    ( 
    SELECT 
     FIRST_VALUE(foo) OVER (PARTITION BY foo COLLATE Latin1_General_CI_AI ORDER BY foo COLLATE Latin1_General_CI_AS) AS safeFoo, 
     foo 
    FROM 
     @t 
    ) X 
WHERE 
    safeFoo <> foo 

第一和第三依靠非重音字符排序重音之前字符

+0

我我不想試着去計算個人。我只需要特定列具有重音字符的行的總數。 –

+0

然後修改第二個。 COLLATE的使用仍然適用。 – gbn