我正在运行一系列 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/