测试大写 - T-Sql

Dan*_*ida 24 sql t-sql sql-server

所有,

如何在T-Sql中检查指定的varchar字符或整个字符串是否为大写?理想情况下,我想编写一个函数来测试一个字符是否为大写,然后我可以将其应用于泛型varchar.对于非字母字符,它应该返回false.我只对英语字符感兴趣.

我正在SQL Management Studio中使用T-sql,我尝试以这种方式从表中以小写字母开头拉记录:

select * from TABLE
where SUBSTRING(author,1,1) != LOWER(SUBSTRING(author,1,1))
Run Code Online (Sandbox Code Playgroud)

返回0条记录,但我知道有大写和小写字母的记录.

谢谢


编辑:既然podiluskajoachim-isaksoon都成功回答了我的问题(这两种方法都适用于我的目的),有人会介意解释哪种方法最有效的方法来查询具有大量记录的表来过滤掉记录作者是否以大写字母开头?

pod*_*ska 34

使用归类

例如:

if ('a'='A' Collate Latin1_General_CI_AI) 
    print'same 1'
else
    print 'different 1'

if ('a'='A' Collate Latin1_General_CS_AI) 
    print'same 2'
else
    print 'different 2' 
Run Code Online (Sandbox Code Playgroud)

排序规则名称中的CS表示区分大小写(以及CI,不区分大小写).AI/AS与重音灵敏度有关.

或者在你的例子中

SUBSTRING(author,1,1) <> LOWER(SUBSTRING(author,1,1)) COLLATE Latin1_General_CS_AI
Run Code Online (Sandbox Code Playgroud)


Joa*_*son 14

检查ch是否为大写,并且是可以在大写和小写之间转换的字符(即排除非字母字符);

WHERE UNICODE(ch) <> UNICODE(LOWER(ch))
Run Code Online (Sandbox Code Playgroud)

一个要测试的SQLfiddle ;