sql - 如何查找超过1个大写字符

标签 sql sql-server sql-server-2008 tsql case-sensitive

我正在运行一系列 SQL 查询来查找需要清理的数据。我想做的其中之一就是寻找:

  • 连续 2 个或更多大写字母
  • 以小写字母开头
  • 空格然后一个小写字母

例如,我的名字应该是“John Doe”。我希望它找到“JOhn Doe”或“JOHN DOE”或“John doe”,但我不希望它找到“John Doe”,因为它的格式正确。

我使用的是 SQL Server 2008。

最佳答案

关键是使用区分大小写的排序规则,即 Latin1_General_BIN*。然后,您可以使用 LIKE expression 的查询像下面这样( SQL Fiddle demo ):

select *
from foo
where name like '%[A-Z][A-Z]%' collate Latin1_General_BIN --two uppercase in a row
or name like '% [a-z]%' collate Latin1_General_BIN --space then lowercase

*根据 How do I perform a case-sensitive search using LIKE? ,显然 Latin1_General_CS_AS 排序规则中存在一个“错误”,其中 [A-Z] 之类的范围无法区分大小写。解决方案是使用 Latin1_General_BIN

关于sql - 如何查找超过1个大写字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180747/

相关文章:

sql-server - 将查询结果存储到变量中并在存储过程中修改它

mysql - 在 MySQL 生日处理中避免每天使用相同的用户

sql - mysql 第一次查询慢,然后相关查询快

mysql - 选择带有 id 1 和 2 标签的项目,但不选择 id 3 或 4 的标签

sql-server - 用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败 - MS SQL Server - 可能无法解决问题

mysql - Sensenet:是否支持Mysql

sql - 返回具有已知前缀和后缀字符的 SUBSTRING

sql - 如何根据SQL Server select语句中的两列值返回一个值?

sql - 大日期范围内的最小/最大日期值取决于值

sql - 如何在同一批处理语句中更新新添加的列