微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择列连续包含三个大写字母的位置

如何解决选择列连续包含三个大写字母的位置

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

我有一个表,使用该函数创建了一个表,其中包含所有varchar列,其中之一名为Surname

我要选择Surname连续包含三个或三个以上大写字母的行。

我已经搜索过该网站和Google等,并且有很多示例可以查找字段中存在任何大写字母或 no 大写字母的地方,但这是比这更微妙的。

该列可以包含任何总数个大写或小写字母,但我只想选择一行包含三个或三个以上大写字母的行。

正则表达式可以在这里工作吗?

解决方法

除非您要安装自定义CLR对象,否则SQL Server本机中实际上并没有任何正则表达式支持。如果您的数据存储为不区分大小写,并且要执行区分大小写的搜索,则一种方法是对列使用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,(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个连续的大写字符)。

请注意,这不会很好地执行,所以希望这不是您经常做的事情。另外,它不会在大写字符之间找到带有其他字符的姓氏,例如Van DE MoorMC-Adams。并不是说那是正常的,而是数据是不正常的,并且希望您了解货物清单。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。