PATINDEX与字母范围,排除变音符号(重音字符)

5

我在尝试使用PatIndex查找一系列字母字符,但排除带重音的字符。如果我进行直接搜索并使用默认排序(不区分大小写),那么效果很好。然而,当我搜索一系列字母时,它会匹配带重音的字符。

SELECT
    IIF('Ú' = 'U' COLLATE Latin1_General_CI_AI, 'Match', 'No') AS MatchInsensitive,
    IIF('Ú' = 'U' COLLATE Latin1_General_CI_AS, 'Match', 'No') AS MatchSensitive,
    PATINDEX('%[A-Z]%', 'Ú' COLLATE Latin1_General_CI_AI)      AS PIInsensitive,
    PATINDEX('%[A-Z]%', 'Ú' COLLATE Latin1_General_CI_AS)      AS PISensitive

将会得到以下结果:
MatchInsensitive MatchSensitive PIInsensitive PISensitive
---------------- -------------- ------------- -----------
Match            No             1             1

我真正想做的是在字符串中识别带重音符号的字符的位置,因此我一直在寻找PATINDEX('%[^A-Z0-9 ]%')

如果我运行以下查询,我期望得到结果为2:SELECT PATINDEX('%[^A-Z0-9 ]%', 'médico'),但实际上我得到的是0。

1个回答

6

您可以使用二进制排序规则,例如 Latin1_General_100_BIN2

select patindex('%[^a-zA-Z0-9 ]%', 'médico' collate Latin1_General_100_BIN2)

rextester:http://rextester.com/ZICLN98474

返回结果为2


谢谢。我简直不敢相信我没想到那个。我只是很惊讶,重音敏感性不起作用。 - RPh_Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接