当前位置: 首页 > 面试题库 >

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

王涵育
2023-03-14
问题内容

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

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

但是,指定每个字母AZ可以:

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

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


问题答案:

不幸的是,范围运算符有点可笑。AZ的字母范围是:

AbBcCdDeE...yYzZ

即,小写字符紧接在大写字母之前。这也很有趣,因为如果要同时处理大小写字符,则在区分大小写的排序规则中,范围AZ排除小写字母a。

关于范围如何扩展,我应该说以上是基于我通常使用的排序规则。范围实际如何扩展取决于排序规则。 如果
找到排序规则,例如,所有大写字母都出现在所有小写字母之前,则该范围将按预期工作。(可能是二进制排序规则之一?)



 类似资料:
  • 问题内容: 谁能解释通配符字符范围(例如[AD])如何使用区分大小写的排序规则的规则? 我本以为以下 将仅返回以大写A,B,C或D开头的记录,并排除以小写a,b,c或d开头的记录。 但是,实际上,它似乎返回以大写字母A开头的记录,但也返回以B或b,C或c以及D或d开头的记录。就像范围的第一个字符区分大小写,而范围中的其余字符也不区分大小写。 另一方面,以下 并 仅返回与上壳体的开始记录,B,C或D

  • 问题内容: MySQL中是否有任何支持区分大小写的排序规则类型。我在MySQL中使用了所有类型的排序规则,它们的名称末尾都带有_ci,因此它们是不区分大小写的排序规则。 问题答案: 根据MySQL手册http://dev.mysql.com/doc/refman/5.0/en/charset- mysql.html, 您应该能够将排序规则设置为区分大小写。您可以通过执行查询来获取归类列表 经过一点

  • 如何使通配符不区分大小写? https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

  • 我试图在Elasticseach 7中实现部分的、区分大小写的匹配。 我正在使用设置创建索引: 以及映射: 以下查询将正确返回文档: 但当我将搜索词小写时,它不会返回文档: 如何配置Elasticsearch,使其与使用小写搜索词的名称字段值匹配?

  • 如何在Java中以区分大小写的方式进行匹配?我的意思是,我想编写一个类似的regex。但是我想匹配以及等等。在Java中最简单的方法是什么?

  • 假设我有一个普通的第三方(即我不能修改它)类,定义如下: 如何使用模式匹配实现?