代码之家  ›  专栏  ›  技术社区  ›  Pero P.

区分大小写排序规则的范围通配符模式匹配行为

  •  7
  • Pero P.  · 技术社区  · 15 年前

    使用PATINDEX和区分大小写的排序规则搜索字符串中的大写字母时,我注意到这并没有产生所需的结果:

    -- returns 1
    SELECT PATINDEX('%[A-Z]%'
                        , 'abCde' COLLATE SQL_Latin1_General_Cp1_CS_AS); 
    

    但是,指定每个字母A-Z可以:

    -- returns 3
    SELECT PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%'
                        , 'abCde' COLLATE SQL_Latin1_General_Cp1_CS_AS); 
    

    我对在第一种情况下使用范围的理解是否不正确?为什么这样的行为?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Damien_The_Unbeliever    15 年前

    不幸的是,测距仪有点搞笑。A-Z的字母范围是:

    AbBcCdDeE...yYzZ
    

    也就是说,小写字符紧跟在大写字符之前。这也很有趣,因为如果要处理大小写字符,在区分大小写的排序规则中,范围a-Z不包括小写a。


    我要说的是,关于范围是如何扩展的,上面是基于我通常使用的排序规则。范围实际上是如何扩大的 collation dependent . 如果 例如,您可以找到一个排序规则,其中所有大写字符都出现在所有小写字符之前,然后该范围将按您的预期工作。(可能是二进制排序规则之一?)

    推荐文章