我在SQL服务器中有一个列测试,
test
-------
This Is Another Test
This is another Test
我想查询应该返回输出的表:
预期产出:
test
-------
This Is Another Test
我写过的查询并没有给出正确的输出检查结果:
select * from proptest where test like '[A-Z][a-z]{2}(?: [A-Z][a-z]*)*$';
如何检查值是否合适?
答案 0 :(得分:2)
使用 BINARY ,进行逐字节比较。
SELECT * from proptest WHERE BINARY test='This Is Another Test';
答案 1 :(得分:1)
您在标题中要求的内容与您的问题和评论不同。要么您不明白Proper Case实际上是什么,要么您只需要在每个单词的开头检查大写字母。
如果您实际上是在尝试验证Proper Casing,那么您还需要处理英语语言赋予我们的所有精彩变体。例如,Sean McDonald
应该算作正确的案例吗?那么Sean Mcdonald
呢?然后是MacDonald
和Macdonald
以及然后您可以获得带有连字符或缩写词的乐趣。 O'Leary
和Don't
应该以同样的方式对待吗?
简而言之,这几乎是不可能的。特别是在SQL中你自己。
也就是说,如果您只想找到所有字母小写字母的字符串,您可以执行以下操作:
declare @t table(t nvarchar(100));
insert into @t values('This Is Another Test'),('This is another Test');
select *
from @t
where t collate Latin1_General_CS_AS not like '% [abcdefghijklmnopqrstuvwxyz]%'; -- For some reason [a-z] still matches upper case letters on my machine.
输出:
+----------------------+
| t |
+----------------------+
| This Is Another Test |
+----------------------+