我试图弄清楚如何使用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。

最佳答案

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

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

右:http://rextester.com/ZICLN98474

返回2

关于sql - 具有字母范围的PATINDEX排除变音符号(带重音符号),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43128049/

10-11 18:54