Select 其中列连续包含三个大写字母

Select where column contains three uppercase letters in a row

我正在使用 SQL Server 2019 并尝试调试我的 ProperCase 将字符串转换为正确大小写的函数。

我有一个 table,我用我的函数创建了它,其中包含所有 varchar 列,其中一列名为 Surname.

我想要 select Surname 连续包含三个或更多大写字母的行。

我搜索了这个网站和 Google 等,有很多例子可以找到 any 大写字母或 no 字段中的大写字母,但这比那个更微妙。

该列可以包含任意 总数 个大写或小写字母,但我只想 select 它旁边包含三个或更多大写字母的行彼此。

这里可以使用正则表达式吗?

在 SQL 服务器中实际上没有任何正则表达式支持,除非您想安装自定义 CLR 对象。如果您的数据存储为不区分大小写并且您想要执行区分大小写的搜索,一种方法是对列使用 COLLATE 子句。

DECLARE @x TABLE(i int, surname nvarchar(500));

INSERT @x(i, surname) VALUES
    (1, 'this is not a match'),
    (2, 'this is a MATCH'),
    (3, 'this is not a match'),
    (4, 'this is DEFINITELY a match');
    
DECLARE @min int = 3;

SELECT i, surname
  FROM @x
  WHERE surname COLLATE Latin1_General_BIN2 
  LIKE N'%' + REPLICATE(N'[A-Z]', @min) + N'%';

结果:

i      surname
----   -----------------------------
2      this is a MATCH
4      this is DEFINITELY a match

This dbfiddle 还演示了 @min 的其他值(如果您想要连续识别 4、40 或 300 个连续的 upper-case 字符)。

请注意,这不会很好地执行,因此希望这不是您经常大规模执行的操作。此外,它不会找到 upper-case 字符之间有其他字符的姓氏,例如 Van DE MoorMC-Adams。不是说那些都正常,而是数据不正常,希望你看清楚货单。