如何验证字符串的正确情况?

时间:2017-11-06 11:54:48

标签: java sql sql-server

我在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]*)*$';

如何检查值是否合适?

2 个答案:

答案 0 :(得分:2)

使用 BINARY ,进行逐字节比较。

SELECT * from proptest WHERE BINARY test='This Is Another Test';

答案 1 :(得分:1)

您在标题中要求的内容与您的问题和评论不同。要么您不明白Proper Case实际上是什么,要么您只需要在每个单词的开头检查大写字母。

如果您实际上是在尝试验证Proper Casing,那么您还需要处理英语语言赋予我们的所有精彩变体。例如,Sean McDonald应该算作正确的案例吗?那么Sean Mcdonald呢?然后是MacDonaldMacdonald以及然后您可以获得带有连字符或缩写词的乐趣。 O'LearyDon'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 |
+----------------------+