区分ø和ae

时间:2018-02-05 07:56:17

标签: sql sql-server

当我执行SQL时aeæ被解释为相同(丹麦语排序规则):

select * from directories where path='test.dk\kkl$\Faelles'

无论如何都要做一个处理æ和ae作为唯一的查询?

1 个答案:

答案 0 :(得分:1)

我在这里使用了@Heinzi的代码(他使用了整理) 我只是想展示如何在WHERE子句和ORDER BY子句中使用它与样本

起初我虽然你需要NVARCHAR()数据类型,但我看到VARCHAR()也支持丹麦字符没有问题(至少你的样本)

declare @code nvarchar(100) = 'æ'
--declare @code nvarchar(100) = 'ae'

select * 
from Danish
where code = @code COLLATE Danish_Greenlandic_100_CI_AI 
--order by code COLLATE Danish_Greenlandic_100_CI_AI desc

因此,您需要在WHERE子句或ORDER BY中为每个条件或组按字段设置Collat​​ion with COLLATE子句,

在@Thomas的评论之后,我添加了以下查询。 它将为'æ'和'ae'

生成单独的行
SELECT
    path COLLATE Danish_Greenlandic_100_CI_AI, 
    migrate, ismigrationroot, 
    COUNT(*) as CNT 
FROM directories 
GROUP BY 
    path COLLATE Danish_Greenlandic_100_CI_AI,
    migrate,
    ismigrationroot 
HAVING 
    COUNT(*) > 1 and 
    ismigrationroot is not null