繁体   English   中英

SQL Server 2008:如何 select 字段全部大写的所有行?

[英]SQL Server 2008: How to select all rows where field has all capital letters?

这就是我的想法,我知道在这个领域,第一个单词总是至少有 2 个字符长。

Select *  
From Table!
where SUBSTRING(Name, 1, 3) like '[A-Z]'

但是,这是带回非大写字母的任何想法吗?

Select ...
From MyTable
Where Name Not Like '%[^A-Z]%' Collate SQL_Latin1_General_CP1_CS_AS

需要注意的是,这也将排除 AZ 之外的数字和字符。 如果您想包含非拉丁大写字符,您确实需要使用Upper function 和Collate e 谓词:

Select ...
From MyTable
Where Name = Upper(Name) Collate SQL_Latin1_General_CP1_CS_AS

测试脚本:

With TestData As
    (
    Select '012324' As Name
    Union All Select 'ABC'
    Union All Select 'abc'
    Union All Select 'aBc'
    Union All Select 'ABé'
    Union All Select 'ABÉ'
    )
Select *
From TestData
Where Name = UPPER(Name) Collate SQL_Latin1_General_CP1_CS_AS

结果:

012324
ABC
ABÉ
CREATE TABLE #table1
(
x VARCHAR(32)
);

INSERT #table1 SELECT '123aaa';
INSERT #table1 SELECT 'foo';
INSERT #table1 SELECT 'BaR';
INSERT #table1 SELECT 'saM';
INSERT #table1 SELECT 'Sam';
INSERT #table1 SELECT 'SaM';
INSERT #table1 SELECT 'SAM';

SELECT * FROM #table1
WHERE CONVERT(VARBINARY(32), x) = CONVERT(VARBINARY(32), UPPER(x))

DROP TABLE #table1;

Output:

x
SAM

您将不得不为您的查询添加一个排序规则 是如何做到这一点的一个很好的例子。

如何针对原始版本测试大写版本:

SELECT * FROM Table WHERE UPPER(Name) = Name

编辑:正如评论中指出的那样,如果排序规则不区分大小写(我认为默认情况下),这将不起作用。 查看托马斯的答案。

你能做类似的事情吗

select * from Table!
where Name = upper(Name) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM