SQL Server 2008:如何选择字段具有全部大写字母的所有行?

时间:2011-04-28 20:09:23

标签: sql regex sql-server-2008

以下是我的想法,我知道在这个字段中,第一个字总是至少2个字符。

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

然而,这会带回非大写字母的任何想法吗?

5 个答案:

答案 0 :(得分:5)

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

应该注意的是,这也将排除A-Z之外的数字和字符。如果您希望包含非拉丁大写字母,则确实需要使用Upper函数和Collate谓词:

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É

答案 1 :(得分:1)

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;

输出:

x
SAM

答案 2 :(得分:0)

您必须在查询中添加collationThis是如何做到这一点的一个很好的例子。

答案 3 :(得分:0)

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

SELECT * FROM Table WHERE UPPER(Name) = Name

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

答案 4 :(得分:0)

你能做点像

的事吗?
select * from Table!
where Name = upper(Name)